valgrind - lucas beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. ·...
TRANSCRIPT
![Page 1: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/1.jpg)
Seite 110.08.12 |
10.08.12Mint Medical GmbH
Lucas Beyer
Einführung in
Valgrind
(dynamische Speicheranalyse)
![Page 2: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/2.jpg)
Seite 210.08.12 |
Was ist valgrind?
● Framework für Tools zur dynamischen Analyse von Programmen● Simuliert Prozessor, Cache, RAM
● Linux/Darwin
● Name des (gut bewachten) Haupteingangs zu Valhalla● Nordische Mythologie● Irrelevant
● Verfügbare Tools:● Memcheck: Erkennen von Fehlern im Speicherverhalten
● Cachegrind: Profiler, auch für Cachelines und CPU Branchingprediction
● Helgrind, DRD: Erkennen von Threadfehlern● Deadlocks● Race conditions
● Viele weitere Tools● Weniger/seltener nützlich
● Benötigt keine Änderung des Codes● Mehr Info wenn mit Debuginfo kompiliert
● Sprich: „Wall“ + G + „Rind“
![Page 3: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/3.jpg)
Seite 310.08.12 |
Memcheck
● Unzulässige Speicherzugriffe
● Verwenden von uninitialisiertem Speicher
● Ungültige frees/deletes
● Ungültige memcpy und ähnliche
● Memoryleaks
![Page 4: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/4.jpg)
Seite 410.08.12 |
Unzulässige Speicherzugriffe
● Lesen und schreiben● Buffer over/underrun● Bereits befreiter Speicher
![Page 5: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/5.jpg)
Seite 510.08.12 |
Memcheck
● Unzulässige Speicherzugriffe
● Verwenden von uninitialisiertem Speicher
● Ungültige frees/deletes
● Ungültige memcpy und ähnliche
● Memoryleaks
![Page 6: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/6.jpg)
Seite 610.08.12 |
Verwenden von uninit. Speicher● Achtung!
g++ -O2 -g
● WTF!? Valgrind funktionniert nicht!!
● C++ undefined behaviour
Generiert
valgrind
Wo ist mein if?
![Page 7: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/7.jpg)
Seite 710.08.12 |
test_uninit2.cpp: In function ‘int main()’:test_uninit2.cpp:5: warning: ‘i’ is used uninitialized in this function
● Moral der Geschicht'
● Ignoriere Compilerwarnungen nicht!
● G++ mit -Wall
Verwenden von uninit. Speicher
![Page 8: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/8.jpg)
Seite 810.08.12 |
Verwenden von uninit. Speicher
● Nur wenn direkt oder indirekt verwendet in● Bedingung● Ausgabe
● Alles andere erlaubt
![Page 9: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/9.jpg)
Seite 910.08.12 |
Memcheck
● Unzulässige Speicherzugriffe
● Verwenden von uninitialisiertem Speicher
● Ungültige frees/deletes
● Ungültige memcpy und ähnliche
● Memoryleaks
![Page 10: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/10.jpg)
Seite 1010.08.12 |
Ungültige frees/deletes
● Double-frees● Unalloced frees● new/delete mismatch
![Page 11: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/11.jpg)
Seite 1110.08.12 |
Memcheck
● Unzulässige Speicherzugriffe
● Verwenden von uninitialisiertem Speicher
● Ungültige frees/deletes
● Ungültige memcpy und ähnliche
● Memoryleaks
![Page 12: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/12.jpg)
Seite 1210.08.12 |
Memoryleaks
● „Still reachable“● Es gibt noch einen gültigen Pointer auf den Anfang des blocks
● Es ist die Rede von memory Blöcken
● „Definitely lost“● Es gibt keinen gültigen Pointer mehr● Typischer memory-leak
● „Indirectly lost“● Es gibt noch gültige Pointer
● Jedoch befinden sich diese auch nur in verlorenem Speicher
● Typischer Folgefehler● z.B. Baumstruktur, wenn die Wurzel verloren ist
● „Possibly lost“● Es gibt noch gültige Pointer, aber nur mitten in den Block
● Zufall● Fehler● C++ new[] „magic cookie“
![Page 13: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/13.jpg)
Seite 1310.08.12 |
Memoryleaks
● „Still reachable“ und „Indirectly lost“● nur angezeigt, wenn –show-reachable=yes● Meist unwichtig
● „Possibly lost“● „Potential memory leak“-Kategorie in Cdash● Nicht zu unterschätzen, wegen C++ new[]
![Page 14: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/14.jpg)
Seite 1410.08.12 |
Memoryleaks
![Page 15: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/15.jpg)
Seite 1510.08.12 |
Memcheck
● Unzulässige Speicherzugriffe
● Verwenden von uninitialisiertem Speicher
● Ungültige frees/deletes
● Ungültige memcpy und ähnliche
● Memoryleaks
● Input ptr und output ptr überlappen● Auch bei strcpy und strcat
● Werden diese heutzutage überhaupt noch verwendet?
![Page 16: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/16.jpg)
Seite 1610.08.12 |
Bonusquiz 1
● G++ option -Wnon-virtual-dtor ist einfacher
quizz_leak.cpp:1: warning: ‘struct Base’ has virtual functions and accessible non-virtual destructorquizz_leak.cpp:10: warning: ‘struct Deriv’ has virtual functions and accessible non-virtual destructor
![Page 17: Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. · 10.08.12 | Seite 2 Was ist valgrind? Framework für Tools zur dynamischen Analyse von Programmen](https://reader035.vdocuments.pub/reader035/viewer/2022071000/5fbcc3a1d9aeee3f46076d16/html5/thumbnails/17.jpg)
Seite 1710.08.12 |
Bonusquiz 2