Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. ·...

17
Seite 1 10.08.12 | 10.08.12 Mint Medical GmbH Lucas Beyer Einführung in Valgrind (dynamische Speicheranalyse)

Transcript of Valgrind - Lucas Beyerlucasb.eyer.be/academic/misc/mint2011-valgrind.pdf · 2017. 8. 2. ·...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Seite 1710.08.12 |

Bonusquiz 2