summaryrefslogtreecommitdiff
path: root/application-devel/app-debugging/handout_app-debugging_de.tex
diff options
context:
space:
mode:
Diffstat (limited to 'application-devel/app-debugging/handout_app-debugging_de.tex')
-rw-r--r--application-devel/app-debugging/handout_app-debugging_de.tex86
1 files changed, 43 insertions, 43 deletions
diff --git a/application-devel/app-debugging/handout_app-debugging_de.tex b/application-devel/app-debugging/handout_app-debugging_de.tex
index b082790..a51177a 100644
--- a/application-devel/app-debugging/handout_app-debugging_de.tex
+++ b/application-devel/app-debugging/handout_app-debugging_de.tex
@@ -3,7 +3,7 @@
\subsection{Applikationen Debuggen}
\subsubsection{STRACE}
-Eine sehr einfache und mächtige Möglichkeit, Systemaufrufe und Signale
+Eine sehr einfache und m\"achtige M\"oglichkeit, Systemaufrufe und Signale
zu tracen, ist das Tool ''strace''. Die Anwendung ist denkbar einfach. Dem Aufruf
des zu tracenden Programms wird einfach strace vorangestellt:
\begin{lstlisting}[language=bash]
@@ -41,9 +41,9 @@ davon sind:\\
\subsubsection{GDB}
\paragraph{Interaktives Debugging mit GDB}
Der GNU Debugger: GDB stellt einen vollwertigen interaktiven Debugger dar,
-der für alle gängigen Prozessorarchitekturen verfügbar ist. GDB bietet ein
-sehr mächtiges Commandlineinterface. Es existieren diverse grafische Frontends
-für GDB (z.B. DDD). Eine einfache Debuggingsession stellt sich wie folgt dar:
+der f\"ur alle g\"angigen Prozessorarchitekturen verf\"ugbar ist. GDB bietet ein
+sehr m\"achtiges Commandlineinterface. Es existieren diverse grafische Frontends
+f\"ur GDB (z.B. DDD). Eine einfache Debuggingsession stellt sich wie folgt dar:
\begin{lstlisting}[language=c]
/* hello.c */
#include <stdio.h>
@@ -54,7 +54,7 @@ für GDB (z.B. DDD). Eine einfache Debuggingsession stellt sich wie folgt dar:
return 0;
}
\end{lstlisting}
-Übersetzen des Programms mit Debuginformationen:
+\"Ubersetzen des Programms mit Debuginformationen:
\begin{lstlisting}
$ gcc -g -o hello hello.c
\end{lstlisting}
@@ -67,7 +67,7 @@ Hello world
Program exited normally.
\end{lstlisting}
-Mit dem Kommando ''list'' kann der zugehörige Quellcode angezeigt werden.
+Mit dem Kommando ''list'' kann der zugeh\"orige Quellcode angezeigt werden.
Breakpoints werden mit ''break'' gesetzt:
\begin{lstlisting}
(gdb) list
@@ -81,8 +81,8 @@ Breakpoints werden mit ''break'' gesetzt:
(gdb) break 5
Breakpoint 1 at 0x400528: file hello.c, line 5.
\end{lstlisting}
-Mit ''next'' und ''step'' werden einzelne Codezeilen ausgeführt,
-während ''next'' einem step-OVER und ''step'' einem step-IN entspricht:
+Mit ''next'' und ''step'' werden einzelne Codezeilen ausgef\"uhrt,
+w\"ahrend ''next'' einem step-OVER und ''step'' einem step-IN entspricht:
\begin{lstlisting}
(gdb) run
Starting program: /home/jan/work/examples/hello
@@ -95,11 +95,11 @@ Hello world
(gdb) continue
Continuing.
\end{lstlisting}
-Folgende Tabelle zeigt eine Übersicht der wichtigsten GDB Kommandos:\\
+Folgende Tabelle zeigt eine \"Ubersicht der wichtigsten GDB Kommandos:\\
\begin{center}
\begin{tabular}{|l|c|p{8cm}|}
\hline
-\textbf{Kommando} & \textbf{Abkürzung} & \textbf{Zweck} \\
+\textbf{Kommando} & \textbf{Abk\"urzung} & \textbf{Zweck} \\
\hline
run & r & Programm starten \\
\hline
@@ -125,7 +125,7 @@ quit & q & GDB beenden \\
\end{center}
\paragraph{Analyse von core-Files}
-Neben der Möglichkeit des interaktiven Debuggings findet GDB auch häufig
+Neben der M\"oglichkeit des interaktiven Debuggings findet GDB auch h\"aufig
eine weitere Anwendung: Die ''Post-Mortem-Analyse'' von Problemen. Wird
eine Applikation beispielsweise durch seinen Segmentation Fault beendet,
wird ein sogenanntes core-File erzeugt, welches u.A. den aktuellen Stack der
@@ -134,11 +134,11 @@ und kann mit dem Kommanto ''ulimit'' aktiviert werden:
\begin{lstlisting}
ulimit -c unlimited
\end{lstlisting}
-Die maximale Größe des zu erzeugenden core-Files wird ulimit als Parameter
-übergeben. Gibt es keine Größenbeschränkung kann einfach ''unlimited'' als
-Parameter übergeben werden. Der Name des zu erzeugenden Files kann unter
+Die maximale Gr\"oße des zu erzeugenden core-Files wird ulimit als Parameter
+\"ubergeben. Gibt es keine Gr\"oßenbeschr\"ankung kann einfach ''unlimited'' als
+Parameter \"ubergeben werden. Der Name des zu erzeugenden Files kann unter
/proc/sys/kernel/core\_pattern festgelegt werden. Folgende Formatoptionen
-können hier verwendet werden:
+k\"onnen hier verwendet werden:
\begin{center}
\begin{tabular}{|c|l|}
\hline
@@ -172,7 +172,7 @@ Folgendes Beispiel verdeutlicht die Analyse eines core-Files:
return 0;
}
\end{lstlisting}
-Programm übersetzen:
+Programm \"ubersetzen:
\begin{lstlisting}
$ gcc -g -o segfault segfault.c
\end{lstlisting}
@@ -203,18 +203,18 @@ Program terminated with signal 11, Segmentation fault.
\end{lstlisting}
\subsubsection{Memory debugging}
-Eine sehr häufige Problemstellung bei der Fehlersuche in Applikationen
-ist das Aufspüren von Problemen in der dynamischen Speicherverwaltung.
-Die häufigsten Probleme, die es hier zu untersuchen gilt, sind:
+Eine sehr h\"aufige Problemstellung bei der Fehlersuche in Applikationen
+ist das Aufsp\"uren von Problemen in der dynamischen Speicherverwaltung.
+Die h\"aufigsten Probleme, die es hier zu untersuchen gilt, sind:
\begin{itemize}
-\item Schreiben / Lesen über die Grenze von Speicherbereichen
+\item Schreiben / Lesen \"uber die Grenze von Speicherbereichen
\item Memory leaks
\item ''Use after free()''
\end{itemize}
\paragraph{GLIBC: MTrace}
Die GNU C Library, GLIBC, liefert bereits ein integriertes Werkzeug zum
Debuggen von Speicherproblemen:MTrace. Die Anwendung von MTrace ist denkbar einfach.
-Im ersten Schritt ist der Code um folgende Zeilen zu ergänzen:
+Im ersten Schritt ist der Code um folgende Zeilen zu erg\"anzen:
\begin{lstlisting}
[...]
#include <mcheck.h>
@@ -243,7 +243,7 @@ int main(void)
free(blurb);
}
\end{lstlisting}
-Übersetzen und Ausführen der Applikation:
+\"Ubersetzen und Ausf\"uhren der Applikation:
\begin{lstlisting}[language=bash]
$ gcc -g -o mem_leak mem_leak.c
$ MALLOC_TRACE=mytrace.log ./mem_leak
@@ -260,12 +260,12 @@ Address Size Caller
0x15364a0 0x1 at /home/jan/work/examples/mem_leak.c:13
[...]
\end{lstlisting}
-\paragraph{GLIBC: Hooks für malloc()}
-Neben mtrace() sieht die GLIBC noch Hooks vor, um Callbacks einzuhängen,
+\paragraph{GLIBC: Hooks f\"ur malloc()}
+Neben mtrace() sieht die GLIBC noch Hooks vor, um Callbacks einzuh\"angen,
die bei jedem Aufruf von malloc(), realloc(), free() oder memalign()
-aufgerufen werden. Hiermit steht eine sehr einfache Möglichkeit zur Verfügung,
-dynamische Speicherverwaltung individuell zu überwachen.\\
-Folgende Variablen sind für diesen Zweck vorgesehen:\\
+aufgerufen werden. Hiermit steht eine sehr einfache M\"oglichkeit zur Verf\"ugung,
+dynamische Speicherverwaltung individuell zu \"uberwachen.\\
+Folgende Variablen sind f\"ur diesen Zweck vorgesehen:\\
\_\_malloc\_hook:
\begin{lstlisting}[language=C]
/* function prototype */
@@ -287,19 +287,19 @@ void *function (void *ptr, const void *caller)
void *function (size_t size, size_t alignment, const void *caller)
\end{lstlisting}
ACHTUNG: Bei der Verwendung von malloc() Hooks ist Vorsicht geboten! Jeglicher
-Aufruf, der seinerseits wiederrum einen malloc() Aufruf initiiert, führt
+Aufruf, der seinerseits wiederrum einen malloc() Aufruf initiiert, f\"uhrt
innerhalb eines malloc() Hooks unvermeidlich zu einer Rekursion.
\paragraph{libDUMA}
Ein weiteres bekanntes Werkzeug zum Speicherdebugging ist eine Bibliothek
mit dem Namen DUMA. Hierbei handelt sich um einen Fork der bekannten
-Electric Fence Libraries von Bruce Perence. DUMA ermöglicht es durch einfaches
-Linken gegen die Bibliothek, Speicherprobleme wie Leaks oder das Schreiben über
+Electric Fence Libraries von Bruce Perence. DUMA erm\"oglicht es durch einfaches
+Linken gegen die Bibliothek, Speicherprobleme wie Leaks oder das Schreiben \"uber
Array Grenzen hinaus zu detektieren. Hierzu bringt DUMA eigene Implementierungen
-von malloc() und free(). Zum Detektieren von Überschriebenen Array Grenzen
+von malloc() und free(). Zum Detektieren von \"Uberschriebenen Array Grenzen
reicht das dynamische Linken oder das einfache ''Pre-loading'' gegen / von libDUMA.
Erkennt DUMA einen Fehler wird ein Segmentation Fault erzeugt. Die Fehlersituation
kann dann mittels core-File oder interaktivem Debuggen analysiert werden. Zum
-Aufspüren von Memory Leaks muß statisch gegen libDUMA gelinkt und weiterhin
+Aufsp\"uren von Memory Leaks muß statisch gegen libDUMA gelinkt und weiterhin
duma.h inkludiert werden. Bezogen auf unser Beispiel bedeutet dies:
\begin{lstlisting}
/* mem_leak.c */
@@ -318,12 +318,12 @@ int main(void)
free(blurb);
}
\end{lstlisting}
-Übersetzen der Applikation (Achtung: Linkreihenfolge beachten!!!):
+\"Ubersetzen der Applikation (Achtung: Linkreihenfolge beachten!!!):
\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
$ gcc -g -o mem_leak mem_leak.c /usr/lib/libduma.a \
-lpthread
\end{lstlisting}
-Ausführen der Applikation:
+Ausf\"uhren der Applikation:
\begin{lstlisting}
$ ./mem_leak
DUMA 2.5.15 (static library)
@@ -339,7 +339,7 @@ DUMA: ptr=0x7f7280bddfff size=1 type='malloc()'
alloced from mem_leak.c(11) not freed
[...]
\end{lstlisting}
-Das Detektieren von überschriebenem Speicher erfordert, wie bereits beschrieben,
+Das Detektieren von \"uberschriebenem Speicher erfordert, wie bereits beschrieben,
kein statisches Linken gegen libDUMA:
\begin{lstlisting}[language=C]
/* array_access.c */
@@ -399,20 +399,20 @@ DUMA\_PROTECT\_BELOW & DUMA platziert normalerweise ''Marker'' hinter dem allozi
Das Setzen dieser Variable veranlaßt DUMA die Marker VOR den allozierten Bereich zu setzen\\
\hline
DUMA\_REPORT\_ALL\_LEAKS & Alle Memory leaks anzeigen (auch wenn Sourcefile und Zeilennummer
-nicht verfügbar sind)\\
+nicht verf\"ugbar sind)\\
\hline
-DUMA\_ALLOW\_MALLOC\_0 & malloc() mit der Größe 0 als Fehler ausgeben\\
+DUMA\_ALLOW\_MALLOC\_0 & malloc() mit der Gr\"oße 0 als Fehler ausgeben\\
\hline
\end{tabular}
\end{center}
Es gibt noch viele andere Environment Variablen. Deren Bedeutung ist der
Manpage von libduma zu entnehmen: ''man duma''
\paragraph{Valgrind}
-Valgrind ist das wohl mächtigste Werkzeug, das zur Analyse von Speicherproblemen
-zur Verfügung steht. Es handelt sich um mehrere Werkzeuge, die unter anderem auch
-Profiling Funkionaliät bieten. Valgrind erreicht eine sehr hohe Trefferquote. Leider
-gibt es derzeit nur beschränkten Support für ARM CPUs (derzeit gibt es noch
-harte Abhängigkeiten nach ARMv7). Die Analyse des Memory Leak Beispiels mit valgrind gestaltet
+Valgrind ist das wohl m\"achtigste Werkzeug, das zur Analyse von Speicherproblemen
+zur Verf\"ugung steht. Es handelt sich um mehrere Werkzeuge, die unter anderem auch
+Profiling Funkionali\"at bieten. Valgrind erreicht eine sehr hohe Trefferquote. Leider
+gibt es derzeit nur beschr\"ankten Support f\"ur ARM CPUs (derzeit gibt es noch
+harte Abh\"angigkeiten nach ARMv7). Die Analyse des Memory Leak Beispiels mit valgrind gestaltet
sich wie folgt:
\begin{lstlisting}[language=C]
/* mem_leak.c */
@@ -431,7 +431,7 @@ int main(void)
free(blurb);
}
\end{lstlisting}
-Übersetzen der Applikation:
+\"Ubersetzen der Applikation:
\begin{lstlisting}[language=bash]
$ gcc -g -o mem_leak mem_leak.c
\end{lstlisting}