<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Abraxas &#187; strace</title>
	<atom:link href="http://www.effinger.org/blog/tag/strace/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.effinger.org/blog</link>
	<description>a personal knowledge base</description>
	<lastBuildDate>Mon, 23 Jan 2012 22:05:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mit strace prüfen, was ein Programm so treibt</title>
		<link>http://www.effinger.org/blog/2010/05/08/mit-strace-prufen-was-ein-programm-so-treibt/</link>
		<comments>http://www.effinger.org/blog/2010/05/08/mit-strace-prufen-was-ein-programm-so-treibt/#comments</comments>
		<pubDate>Sat, 08 May 2010 20:19:13 +0000</pubDate>
		<dc:creator>Markus Effinger</dc:creator>
				<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[strace]]></category>

		<guid isPermaLink="false">http://www.effinger.org/blog/?p=986</guid>
		<description><![CDATA[<p>Manchmal kommt man mit Fehlermeldungen von Programmen einfach nicht weiter. Bevor man jedoch im Trial- und Errorverfahren Konfigurationsparameter ausprobiert, um dem Fehler auf die Spur zu kommen oder gleich ein alternatives Programm wählt, kann man strace bemühen. Dieses kleine Programm erlaubt es Systemaufrufe eines Programmes zu protokollieren.</p> Die wichtigsten Parameter von strace -o filename schreibt [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal kommt man mit Fehlermeldungen von Programmen einfach nicht weiter. Bevor man jedoch im Trial- und Errorverfahren Konfigurationsparameter ausprobiert, um dem Fehler auf die Spur zu kommen oder gleich ein alternatives Programm wählt, kann man strace bemühen. Dieses kleine Programm erlaubt es Systemaufrufe eines Programmes zu protokollieren.</p>
<h3>Die wichtigsten Parameter von strace</h3>
<ul>
<li><em>-o filename</em> schreibt die Ausgabe in die Datei <em>filename</em></li>
<li><em>-f</em> mit diesem Parameter protokolliert das Programm auch forks (d.h. neue Prozesse, die durch das zu protokollierende Programm gestartet werden)</li>
<li><em>-tt</em> mit diesem Parameter wird vor jedem Aufruf zunächst die Zeit protokolliert (auf Basis von Mikrosekunden)</li>
<li><em>-e</em> schränkt die Events ein, die strace protokolliert (siehe Beispiele weiter unten)</li>
<li><em>-p PID</em> strace protokolliert die Systemaufrufe des Prozesses mit der Prozess-ID <em>PID</em></li>
</ul>
<p>Ein beispielhafter Aufruf sieht dann so aus</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">strace</span> <span style="color: #660033;">-o</span> logfile.log <span style="color: #660033;">-f</span> .<span style="color: #000000; font-weight: bold;">/</span>mycommand <span style="color: #660033;">-mycommandparameter</span></pre></div></div>

<p>Im Folgenden sind einige nützliche Beispiele für spezielle Programmaufrufe aufgeführt.</p>
<h3>Auf welche Dateien greift ein Programm zu?</h3>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">strace</span> <span style="color: #660033;">-e</span> <span style="color: #007800;">trace</span>=open <span style="color: #660033;">-o</span> logfile.log .<span style="color: #000000; font-weight: bold;">/</span>mycommand <span style="color: #660033;">-mycommandparameter</span></pre></div></div>

<p>Das habe ich mir von <a href="http://www.netadmintools.com/art353.html">NetAdminTools</a> abgeschaut.</p>
<h3>Welche Programme startet/pausiert/beendet das Programm?</h3>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">strace</span> <span style="color: #660033;">-e</span> <span style="color: #007800;">trace</span>=process <span style="color: #660033;">-o</span> logfile.log .<span style="color: #000000; font-weight: bold;">/</span>mycommand <span style="color: #660033;">-mycommandparameter</span></pre></div></div>

<h3>Wie protokolliere ich die Systemaufrufe eine Programms, das schon gestartet ist?</h3>
<p>Hierfür gibt es den Parameter <em>-p</em> von strace, mit dem man die entsprechende Prozess-ID des Programms an strace übergibt. Um diese ID herauszufinden bemüht man zunächst ps, welches mit dem folgenden Befehl die IDs aller laufenden Prozesse mit dem Namen mycommand auflistet.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ps</span> aux <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> mycommand <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-v</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> mycommand</pre></div></div>

<p>Wer es kürzer haben möchte, sollte sich meine <a href="http://www.effinger.org/blog/2008/11/20/arbeitserleichterung-durch-bashrc-und-bash_aliases/">bashrc</a> anschauen, in der eine Funktion pg definiert ist, die mit dem Aufruf</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pg mycommand</pre></div></div>

<p>dasselbe Resultat erzielt. Angenommen die Ausgabe in der Spalte PID lautet 123, dann würde man strace folgendermaßen aufrufen.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">strace</span> <span style="color: #660033;">-o</span> logfile.log <span style="color: #660033;">-p</span> <span style="color: #000000;">123</span></pre></div></div>

<p>Falls es mit Sicherhheit nur ein Programm namens mycommand läuft, geht das auch schneller mit einem</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">strace</span> <span style="color: #660033;">-o</span> logfile.log <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">pidof</span> mycommand<span style="color: #000000; font-weight: bold;">`</span></pre></div></div>

<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>strong<span style="color: #000000; font-weight: bold;">&gt;&lt;</span>strong<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #c20cb9; font-weight: bold;">strace</span> <span style="color: #660033;">-e</span> <span style="color: #007800;">trace</span>=open<span style="color: #000000; font-weight: bold;">&lt;/</span>strong<span style="color: #000000; font-weight: bold;">&gt;&lt;/</span>strong<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

</div>
<h3>Wie versteht man die Ausgabe von strace?</h3>
<p>Am Beispiel der folgenden Ausgabe wollen wir mal grob nachvollziehen, was ein Programm gerade macht</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">execve<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">&quot;/bin/cat&quot;</span>, <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #ff0000;">&quot;cat&quot;</span>, <span style="color: #ff0000;">&quot;/var/log/messages&quot;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>, <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000;">37</span> vars <span style="color: #000000; font-weight: bold;">*/</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> = <span style="color: #000000;">0</span></pre></div></div>

<p>Was macht der Befehl execve? Dazu rufen wir mit</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">man</span> execve</pre></div></div>

<p>die entsprechende Hilfedatei auf und erfahren dort, dass das Programm cat mit dem Parameter /var/log/messages gestartet wird.</p>
<p>Welche Tips und Kniffe fallen euch noch im Zusammenhang mit strace ein?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.effinger.org/blog/2010/05/08/mit-strace-prufen-was-ein-programm-so-treibt/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

