summaryrefslogtreecommitdiff
path: root/application-devel/app-debugging
diff options
context:
space:
mode:
Diffstat (limited to 'application-devel/app-debugging')
-rw-r--r--application-devel/app-debugging/Makefile4
-rw-r--r--application-devel/app-debugging/handout_app-debugging_de.tex29
-rw-r--r--application-devel/app-debugging/images/remote_debug.pngbin21795 -> 0 bytes
-rw-r--r--application-devel/app-debugging/pres_app-debugging_de.tex36
4 files changed, 23 insertions, 46 deletions
diff --git a/application-devel/app-debugging/Makefile b/application-devel/app-debugging/Makefile
index 4663d52..d641258 100644
--- a/application-devel/app-debugging/Makefile
+++ b/application-devel/app-debugging/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/application-devel/app-debugging/handout_app-debugging_de.tex b/application-devel/app-debugging/handout_app-debugging_de.tex
index acbd340..b082790 100644
--- a/application-devel/app-debugging/handout_app-debugging_de.tex
+++ b/application-devel/app-debugging/handout_app-debugging_de.tex
@@ -1,13 +1,8 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
-\usepackage{lxextras}
-\lstset{keywordstyle=\color{blue}}
+\input{confighandout}
-\begin{document}
+\subsection{Applikationen Debuggen}
-\section{STRACE}
+\subsubsection{STRACE}
Eine sehr einfache und mächtige Möglichkeit, Systemaufrufe und Signale
zu tracen, ist das Tool ''strace''. Die Anwendung ist denkbar einfach. Dem Aufruf
des zu tracenden Programms wird einfach strace vorangestellt:
@@ -43,8 +38,8 @@ davon sind:\\
\hline
\end{tabular}
\end{center}
-\section{GDB}
-\subsection{Interaktives Debugging mit GDB}
+\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
@@ -129,7 +124,7 @@ quit & q & GDB beenden \\
\end{tabular}
\end{center}
-\subsection{Analyse von core-Files}
+\paragraph{Analyse von core-Files}
Neben der Möglichkeit des interaktiven Debuggings findet GDB auch häufig
eine weitere Anwendung: Die ''Post-Mortem-Analyse'' von Problemen. Wird
eine Applikation beispielsweise durch seinen Segmentation Fault beendet,
@@ -207,7 +202,7 @@ Program terminated with signal 11, Segmentation fault.
#0 0x0000000000400538 in main () at segfault.c:6
\end{lstlisting}
-\section{Memory debugging}
+\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:
@@ -216,7 +211,7 @@ Die häufigsten Probleme, die es hier zu untersuchen gilt, sind:
\item Memory leaks
\item ''Use after free()''
\end{itemize}
-\subsection{GLIBC: MTrace}
+\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:
@@ -265,7 +260,7 @@ Address Size Caller
0x15364a0 0x1 at /home/jan/work/examples/mem_leak.c:13
[...]
\end{lstlisting}
-\subsection{GLIBC: Hooks für malloc()}
+\paragraph{GLIBC: Hooks für malloc()}
Neben mtrace() sieht die GLIBC noch Hooks vor, um Callbacks einzuhängen,
die bei jedem Aufruf von malloc(), realloc(), free() oder memalign()
aufgerufen werden. Hiermit steht eine sehr einfache Möglichkeit zur Verfügung,
@@ -294,7 +289,7 @@ void *function (size_t size, size_t alignment, const void *caller)
ACHTUNG: Bei der Verwendung von malloc() Hooks ist Vorsicht geboten! Jeglicher
Aufruf, der seinerseits wiederrum einen malloc() Aufruf initiiert, führt
innerhalb eines malloc() Hooks unvermeidlich zu einer Rekursion.
-\subsection{libDUMA}
+\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
@@ -412,7 +407,7 @@ DUMA\_ALLOW\_MALLOC\_0 & malloc() mit der Größe 0 als Fehler ausgeben\\
\end{center}
Es gibt noch viele andere Environment Variablen. Deren Bedeutung ist der
Manpage von libduma zu entnehmen: ''man duma''
-\subsection{Valgrind}
+\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
@@ -464,4 +459,4 @@ $ valgrind --leak-check=full ./mem_leak
[...]
\end{lstlisting}
-\end{document}
+\input{tailhandout}
diff --git a/application-devel/app-debugging/images/remote_debug.png b/application-devel/app-debugging/images/remote_debug.png
deleted file mode 100644
index f7a3ba9..0000000
--- a/application-devel/app-debugging/images/remote_debug.png
+++ /dev/null
Binary files differ
diff --git a/application-devel/app-debugging/pres_app-debugging_de.tex b/application-devel/app-debugging/pres_app-debugging_de.tex
index f90c551..32a3e85 100644
--- a/application-devel/app-debugging/pres_app-debugging_de.tex
+++ b/application-devel/app-debugging/pres_app-debugging_de.tex
@@ -1,28 +1,16 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
-\usepackage{lxextras}
+\input{configpres}
+\subsection{Debugging}
-
-\title{Block \lq Debugging\rq}
-\institute{Linutronix GmbH}
-
-\lstset{keywordstyle=\color{blue},commentstyle=\color{orange}}
-
-\begin{document}
-
+\title{\lq Debugging\rq}
\maketitle
+
\begin{frame}
\frametitle{Übersicht}
\tableofcontents
\end{frame}
-\section{Einfache Debugging Werkzeuge}
-\subsection{Systemcalls tracen mit STRACE}
+\subsubsection{Einfache Debugging Werkzeuge}
\begin{frame}
\frametitle{STRACE}
\begin{alertblock}{Was ist STRACE?}
@@ -57,8 +45,7 @@ fstat64(3, {st_mode=S_IFREG|0644, st_size=113431, ...}
\end{itemize}
\end{frame}
-\section{Der GNU Debugger: GDB}
-\subsection{Interaktives Debugging mit GDB}
+\subsubsection{Der GNU Debugger: GDB}
\begin{frame}[containsverbatim]
\frametitle{Hello world debuggen}
\begin{enumerate}
@@ -153,7 +140,6 @@ quit & q & GDB beenden \\
\end{tabular}
\end{frame}
-\subsection{Post mortem Analyse mit GDB}
\begin{frame}[containsverbatim]
\frametitle{Post Mortem Debugging mit GDB}
\begin{lstlisting}[language=C]
@@ -212,7 +198,6 @@ gdb ./exe corefile & Coredump mit GDB anzeigen \\
\end{tabular}
\end{frame}
-\subsection{Remote Debugging mit GDB}
\begin{frame}
\frametitle{Remote Debugging}
\begin{figure}[h]
@@ -255,7 +240,7 @@ target remote 10.0.0.3:54321
powerpc-linux-gnu-gdb -x gdbinit.txt cross_hello
\end{lstlisting}
\end{frame}
-\section{Memory debugging}
+\subsubsection{Memory debugging}
\begin{frame}
\frametitle{Memory debugging}
Gängige Probleme:
@@ -265,7 +250,6 @@ Gängige Probleme:
\item ''Use after free()''
\end{itemize}
\end{frame}
-\subsection{MTrace}
\begin{frame}[containsverbatim]
\frametitle{GLIBC eigene Mechanismen: MTrace}
\begin{lstlisting}[language=C]
@@ -325,7 +309,6 @@ Address Size Caller
\end{lstlisting}
\end{frame}
-\subsection{malloc() hooks}
\begin{frame}[containsverbatim]
\frametitle{GLIBC eigene Mechanismen: Hooks für malloc()}
\_\_malloc\_hook:\\
@@ -337,7 +320,6 @@ void *function (void *ptr, const void *caller)\\
\_\_memalign\_hook:\\
void *function (size\_t size, size\_t alignment, const void *caller)
\end{frame}
-\subsection{libDUMA (aka electric fence)}
\begin{frame}[containsverbatim]
\frametitle{libDUMA / electric fence}
\begin{lstlisting}[language=C,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
@@ -437,7 +419,6 @@ Segmentation fault (core dumped)
\end{lstlisting}
\end{frame}
-\subsection{valgrind}
\begin{frame}
\frametitle{Valgrind}
\begin{alertblock}{Vorteile}
@@ -498,4 +479,5 @@ $ valgrind --leak-check=full ./mem_leak
[...]
\end{lstlisting}
\end{frame}
-\end{document}
+
+\input{tailpres}