summaryrefslogtreecommitdiff
path: root/application-devel
diff options
context:
space:
mode:
authorJohn Ogness <john.ogness@linutronix.de>2018-11-06 14:22:30 +0106
committerJohn Ogness <john.ogness@linutronix.de>2018-11-06 14:22:30 +0106
commit92f7f4fa7ae94290a1ddf39fc86b247d6cab591d (patch)
treea4ed91273f887c3988f8bee5cba57db7fd3bad7f /application-devel
parentb3410088cbaead5ed42f9069dc1c20bd7f20fb51 (diff)
app-debugging: remove obsolete slides
Trainers should use DEBUGGING_TOOLS instead. Signed-off-by: John Ogness <john.ogness@linutronix.de>
Diffstat (limited to 'application-devel')
-rw-r--r--application-devel/app-debugging/Makefile1
-rw-r--r--application-devel/app-debugging/pres_app-debugging_de.tex483
-rw-r--r--application-devel/debugging-tools/Kconfig2
3 files changed, 1 insertions, 485 deletions
diff --git a/application-devel/app-debugging/Makefile b/application-devel/app-debugging/Makefile
index aa043f0..ba6d1de 100644
--- a/application-devel/app-debugging/Makefile
+++ b/application-devel/app-debugging/Makefile
@@ -1,2 +1 @@
-obj-$(CONFIG_APPLICATION_DEBUGGING) += pres_app-debugging_de.pdf
obj-handout-$(CONFIG_APPLICATION_DEBUGGING) += handout_app-debugging_de.pdf
diff --git a/application-devel/app-debugging/pres_app-debugging_de.tex b/application-devel/app-debugging/pres_app-debugging_de.tex
deleted file mode 100644
index 7b3a4cc..0000000
--- a/application-devel/app-debugging/pres_app-debugging_de.tex
+++ /dev/null
@@ -1,483 +0,0 @@
-\input{configpres}
-
-\subsection{Debugging}
-
-\title{\lq Debugging\rq}
-\maketitle
-
-\begin{frame}
-\frametitle{Übersicht}
-\tableofcontents
-\end{frame}
-
-\subsubsection{Einfache Debugging Werkzeuge}
-\begin{frame}
-\frametitle{STRACE}
-\begin{alertblock}{Was ist STRACE?}
-STRACE ist ein mächtiges Diagnosewerkzeug, mit dem sich System Calls und Signale
-tracen lassen.
-\end{alertblock}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Anwendungsbeispiel}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ strace /bin/ls
-execve("/bin/ls", ["/bin/ls"], [/* 38 vars */]) = 0
-brk(0) = 0x8061000
-access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT
-mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MA
-0xb7f03000
-access("/etc/ld.so.preload", R_OK) = -1 ENOENT
-open("/etc/ld.so.cache", O_RDONLY) = 3
-fstat64(3, {st_mode=S_IFREG|0644, st_size=113431, ...}
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Wichtige STRACE Optionen}
-\begin{itemize}
-\item \textbf{-f}: Follow Forks
-\item \textbf{-v}: Verbose mode
-\item \textbf{-T}: Print out time which is spent in each syscall
-\item \textbf{-p PID}: Attach to PID
-\end{itemize}
-\end{frame}
-
-\subsubsection{Der GNU Debugger: GDB}
-\begin{frame}[containsverbatim]
-\frametitle{Hello world debuggen}
-\begin{enumerate}
-\item Übersetzen mit Debug Informationen
-\item Starten im Debugger:
-\begin{lstlisting}[language=bash]
-gdb ./hello
-\end{lstlisting}
-\end{enumerate}
-\end{frame}
-
-
-\begin{frame}[containsverbatim]
-\frametitle{Wichtige GDB Kommandos}
-\begin{verbatim}
-(gdb) run
-Starting program: /home/jan/work/examples/hello
-Hello world
-
-Program exited normally.
-(gdb)
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Wichtige GDB Kommandos}
-\begin{verbatim}
-(gdb) list
-1 #include <stdio.h>
-2
-3 int main (void)
-4 {
-5 printf("Hello world\n");
-6 return 0;
-7 }
-(gdb) break 5
-Breakpoint 1 at 0x400528: file hello.c, line 5.
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Wichtige GDB Kommandos}
-\begin{verbatim}
-(gdb) run
-Starting program: /home/jan/work/examples/hello
-
-Breakpoint 1, main () at hello.c:5
-5 printf("Hello world\n");
-(gdb) next
-Hello world
-6 return 0;
-(gdb) continue
-Continuing.
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{GDB Kommandos: Übersicht}
-\begin{tabular}{|c|c|p{5cm}|}
-\hline
-\textbf{Kommando} & \textbf{Abkürzung} & \textbf{Zweck} \\
-\hline
-run & r & Programm starten \\
-\hline
-continue & c & Programm fortsetzen \\
-\hline
-break X & b & Breakpoint in Zeile X setzen \\
-\hline
-step & s & step IN \\
-\hline
-next & n & step OVER \\
-\hline
-print var & -- & Inhalt von Variable var anzeigen \\
-\hline
-display var & -- & Inhalt von Variable var jedes mal anzeigen, wenn das Programm stoppt \\
-\hline
-\end{tabular}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{GDB Kommandos: Übersicht}
-\begin{tabular}{|c|c|p{5cm}|}
-\hline
-\textbf{Kommando} & \textbf{Abkürzung} & \textbf{Zweck} \\
-\hline
-backtrace & bt & Backtrace anzeigen \\
-\hline
-frame X & f & Im aktuellen Stack zu Frame Nr. X wechseln \\
-\hline
-quit & q & GDB beenden \\
-\hline
-\end{tabular}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Post Mortem Debugging mit GDB}
-\begin{lstlisting}[language=C]
-#include <stdio.h>
-
-int main (void)
-{
-char *arthur_dent = NULL;
-printf("Hello segfault world\n", *arthur_dent);
-return 0;
-}
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Post Mortem Debugging mit GDB}
-\begin{lstlisting}[language=bash]
-ulimit -c unlimited
-$ ./hello_segfault
-Segmentation fault (core dumped)
-$ ls -l core*
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Post Mortem Debugging mit GDB}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ gdb hello_segfault core
-[...]
-Loaded symbols for /lib64/ld-linux-x86-64.so.2
-Core was generated by `./hello_segfault'.
-Program terminated with signal 11, Segmentation fault.
-#0 0x0000000000400538 in main () at hello_crash.c:6
-6 printf("Hello segfaulting world %s\n",
- *arthur_dent);
-(gdb) bt
-#0 0x0000000000400538 in main () at hello_crash.c:6
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Wichtig Kommandos für Post Mortem Debugging}
-\begin{tabular}{|p{5.5cm}|p{5cm}|}
-\hline
-\textbf{Kommando} & \textbf{Zweck} \\
-\hline
-ulimit & Coredumps aktivieren und größe festlegen \\
-\hline
-cat /proc/sys/kernel/core\_pattern & Aktuelles Namenspattern für core-Files anzeigen \\
-\hline
-echo core-\%p \textgreater /proc/sys/kernel/core\_pattern & Namenspattern für
-core-Files setzen \\
-\hline
-gdb ./exe corefile & Coredump mit GDB anzeigen \\
-\hline
-\end{tabular}
-\end{frame}
-
-\begin{frame}
-\frametitle{Remote Debugging}
-\begin{figure}[h]
-\centering
-\includegraphics[width=8cm]{images/remote_debug.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Remote Debugging session}
-\begin{lstlisting}[language=bash]
-$ powerpc-linux-gnu-gdb cross_hello
-(gdb) set solib-absolute-prefix /XXX/libc/
-(gdb) target remote 10.0.0.3:54321
-Remote debugging using localhost:54321
-0x30016180 in _start() from /XXX/libc/lib/ld.so.1
-(gdb) c
-\end{lstlisting}
-Auf dem Target:
-\begin{lstlisting}[language=bash]
-$ gdbserver 10.0.0.2:54321 ./cross_hello
-Process ./cross_hello created; pid = 310
-Listening on port 54321
-Remote debugging from host 10.0.2.2
-Hello world
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{gdbinit}
-GDB Kommandos automatisch ausführen:
-\begin{lstlisting}[language=bash]
-vim gdbinit.txt
-\end{lstlisting}
-\begin{verbatim}
-set solib-absolute-prefix /XXX/libc/
-target remote 10.0.0.3:54321
-\end{verbatim}
-\begin{lstlisting}[language=bash]
-powerpc-linux-gnu-gdb -x gdbinit.txt cross_hello
-\end{lstlisting}
-\end{frame}
-\subsubsection{Memory debugging}
-\begin{frame}
-\frametitle{Memory debugging}
-Gängige Probleme:
-\begin{itemize}
-\item Schreiben / Lesen über die Grenze von Speicherbereichen
-\item Memory leaks
-\item ''Use after free()''
-\end{itemize}
-\end{frame}
-\begin{frame}[containsverbatim]
-\frametitle{GLIBC eigene Mechanismen: MTrace}
-\begin{lstlisting}[language=C]
-/* mem_test.c */
-[...]
-#include <mcheck.h>
-[...]
-int main(void)
-{
- mtrace();
- [...]
-}
-\end{lstlisting}
-\begin{lstlisting}[language=bash]
-$ gcc -o mem_test mem_test.c
-$ MALLOC_TRACE=mytrace.log ./mem_test
-$ mtrace mem_test mytrace.log
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{GLIBC eigene Mechanismen: MTrace}
-\begin{lstlisting}[language=C,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-/* mem_leak.c */
-#include <mcheck.h>
-#include <malloc.h>
-#include <stdio.h>
-
-int main(void)
-{
- int i = 0;
- char *blurb = NULL;
-
- mtrace();
-
- for(i = 0; i < 50; i++)
- blurb = malloc(sizeof(char));
-
- free(blurb);
-}
-\end{lstlisting}
-\end{frame}
-\begin{frame}[containsverbatim]
-\frametitle{GLIBC eigene Mechanismen: MTrace}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ gcc -g -o mem_leak mem_leak.c
-$ MALLOC_TRACE=mytrace.log ./mem_leak
-$ mtrace ./mem_leak mytrace.log
-
-Memory not freed:
------------------
-Address Size Caller
-0x1536460 0x1 at /home/jan/work/examples/mem_leak.c:13
-0x1536480 0x1 at /home/jan/work/examples/mem_leak.c:13
-0x15364a0 0x1 at /home/jan/work/examples/mem_leak.c:13
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{GLIBC eigene Mechanismen: Hooks für malloc()}
-\_\_malloc\_hook:\\
-void *function (size\_t size, const void *caller)\\
-\_\_realloc\_hook:\\
-void *function (void *ptr, size\_t size, const void *caller)\\
-\_\_free\_hook:\\
-void *function (void *ptr, const void *caller)\\
-\_\_memalign\_hook:\\
-void *function (size\_t size, size\_t alignment, const void *caller)
-\end{frame}
-\begin{frame}[containsverbatim]
-\frametitle{libDUMA / electric fence}
-\begin{lstlisting}[language=C,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-/* mem_leak.c */
-#include <duma.h>
-#include <malloc.h>
-#include <stdio.h>
-
-int main(void)
-{
- int i = 0;
- char *blurb = NULL;
-
- for(i = 0; i < 50; i++)
- blurb = malloc(sizeof(char));
-
- free(blurb);
-}
-\end{lstlisting}
-\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}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{libDUMA / electric fence}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ ./mem_leak
-DUMA 2.5.15 (static library)
-Copyright (C) 2006 Michael Eddington
-<meddington@gmail.com>
-Copyright (C) 2002-2008 Hayati Ayguen
-<h_ayguen@web.de>, Procitec GmbH
-Copyright (C) 1987-1999 Bruce Perens
-<bruce@perens.com>
-DUMA: ptr=0x7f7280bdbfff size=1 type='malloc()'
- alloced from mem_leak.c(11) not freed
-DUMA: ptr=0x7f7280bddfff size=1 type='malloc()'
- alloced from mem_leak.c(11) not freed
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{libDUMA / electric fence: Überschriebener Speicher}
-\begin{lstlisting}[language=C,basicstyle=\ttfamily\fontsize{8}{8}\selectfont]
-/* array_access.c */
-#include <stdio.h>
-#include <malloc.h>
-#include <string.h>
-
-int main(void)
-{
- int *my_array = (int*) malloc(10 * sizeof(int));
- int i = 0;
- memset(my_array, 0, 10 * sizeof(int));
-
- for(i = 0; i < 11; i++)
- printf("%d ", my_array[i]);
-
- printf("\n");
- return 0;
-}
-\end{lstlisting}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ gcc -g -o array_access array_access.c
-./array_access 0 0 0 0 0 0 0 0 0 0 135121
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{libDUMA / electric fence: Überschriebener Speicher}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ gcc -lduma -g -o array_access array_access.c
-$ ulimit -c unlimited
-$ ./array_access
-Segmentation fault (core dumped)
-$ gdb array_access core
-Loaded symbols for /lib64/ld-linux-x86-64.so.2
-Core was generated by `./array_access'.
-Program terminated with signal 11, Segmentation fault.
-#0 0x00000000004006b7 in main () at array_access.c:10
-10 printf("%d\n", my_array[i]);
-(gdb) print i
-$1 = 10
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{libDUMA / electric fence: Überschriebener Speicher}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ gcc -g -o array_access array_access.c
-$ LD_PRELOAD=/usr/lib/libduma.so ./array_access
-Segmentation fault (core dumped)
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}
-\frametitle{Valgrind}
-\begin{alertblock}{Vorteile}
-\begin{itemize}
-\item Sehr hohe Trefferquote
-\item Sehr viel Funktionalität
-\end{itemize}
-\end{alertblock}
-\begin{alertblock}{Nachteile}
-\begin{itemize}
-\item Laufzeit sehr stark beeinflusst
-\end{itemize}
-\end{alertblock}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\begin{lstlisting}[language=C,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-/* mem_leak.c */
-#include <malloc.h>
-#include <stdio.h>
-
-int main(void)
-{
- int i = 0;
- char *blurb = NULL;
-
- for(i = 0; i < 50; i++)
- blurb = malloc(sizeof(char));
-
- free(blurb);
-}
-\end{lstlisting}
-\begin{lstlisting}[language=bash,basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ gcc -g -o mem_leak mem_leak.c
-\end{lstlisting}
-\end{frame}
-\begin{frame}[containsverbatim]
-\begin{lstlisting}[basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ valgrind --leak-check=full ./mem_leak
-=5764= Memcheck, a memory error detector
-=5764= Copyright (C) 2002-2009, and GNU GPL'd, by
- Julian Seward et al.
-=5764= Using Valgrind-3.6.0.SVN-Debian and LibVEX;
- rerun with -h for copyright info
-=5764= Command: ./mem_leak
-=5764=
-=5764= HEAP SUMMARY:
-=5764= in use at exit: 49 bytes in 49 blocks
-=5764= total heap usage: 50 allocs, 1 frees,
-=5764= 50 bytes allocated
-=5764= 49 bytes in 49 blocks are definitely lost in
-=5764= loss record 1 of 1
-=5764= at 0x4C274A8: malloc (vg_replace_malloc.c:236)
-=5764= by 0x40058D: main (mem_leak.c:10)
-=5764=
-=5764= LEAK SUMMARY:
-=5764= definitely lost: 49 bytes in 49 blocks
-[...]
-\end{lstlisting}
-\end{frame}
-
-\input{tailpres}
diff --git a/application-devel/debugging-tools/Kconfig b/application-devel/debugging-tools/Kconfig
index a1414b7..b209845 100644
--- a/application-devel/debugging-tools/Kconfig
+++ b/application-devel/debugging-tools/Kconfig
@@ -1,5 +1,5 @@
config DEBUGGING_TOOLS
- bool "Application Debugging tools (german)"
+ bool "Application Debugging tools"
default y
help
gdb, efence, duma, openocd, ldd