Top Banner
Seite 1 10.08.12 | 10.08.12 Mint Medical GmbH Lucas Beyer Einführung in Valgrind (dynamische Speicheranalyse)
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

Aug 16, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

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