Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Debugging

Ähnliche Dokumente
Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Dokumentation mit Doxygen


Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Was ist Reference Counting Implementierung. Ende. Reference Counting. Kevin Köster. Uni Hamburg. 31. März Kevin Köster Reference Counting 1/58

Übungen zu Systemprogrammierung 1 (SP1)

Effizientes Memory Debugging in C/C++

Advanced Programming in C

Dynamischer Speicher

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

lome6 (Lights-Out-Management-Ether6) by warhog 2011

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

Einführung in die C-Programmierung

AuD-Tafelübung T-B5b

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

2. Programmierwerkzeuge

Zählen von Objekten einer bestimmten Klasse

Deklarationen in C. Prof. Dr. Margarita Esponda

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm

Programmierwerkzeuge. Projektmanagement im So2warebereich

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()


FensterHai. - Integration von eigenen Modulen -

2. Programmierwerkzeuge AlDaBi Prak4kum

Programmierung mit C Zeiger

Einführung in die C++ Programmierung für Ingenieure

GCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 Version 1.0

Entwicklung mit mehreren Dateien

Intel Cluster Studio. Michael Burger FG Scientific Computing TU Darmstadt

Einführung in die Programmierung Debugging, Programmbibliotheken

Vorkurs C++ Programmierung

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Modulare Programmierung und Bibliotheken

Fehlererkennung. C - Kurs September This work is licensed under a Creative Commons AttributionNonComercialShareAlike 3.0 License.

3. Semester : 1. Prüfung

ReadMe zur Installation der BRICKware for Windows, Version ReadMe on Installing BRICKware for Windows, Version 6.1.2

A study on computer-aided design of PIN-diode phase modulators at microwave frequencies

check_cisco_voice Dokumentation

Programmierung eines GIMP-Plugin

Festlegungen für die Code Entwicklung Table of contents

Assembler - Einleitung

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems

Profiling und Coverage mit GNU und Bare Embedded Systems

Repetitorium Informatik (Java)

FB Informatik. Fehler. Testplan

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany

Teil IV Die Programmiersprache C++

NVR Mobile Viewer for iphone/ipad/ipod Touch

Übung zur Vorlesung Programmieren in C

die wichtigsten Caches (SGA) sind on-the-fly änderbar.

3D Programmierpraktikum: Einführung in C++ - Teil 1

Sprachausgabe. Die Steuerung des Interfaces kann, abhängig von der Besückung über I2C, RS232 oder USB erfolgen

Warum funktioniert das nicht? Wie man Fehler in Linuxapplikationen findet und behebt. Einführung. LinuxFocus article number 343

Übung 1 - Betriebssysteme I

Anhang A - Weitere Bibliotheken. Die Bibliothek Mail_02.lib ermöglicht das Versenden von s mit dem Ethernet-Controller

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL - USER GUIDE June 2016

Javakurs 2013 Objektorientierung

Der Computer von Neumann

Inptools-Handbuch. Steffen Macke

Anleitung für PVM, Glasgow parallel Haskell (GpH) und GranSim:

Titelbild1 ANSYS. Customer Portal LogIn

Dr. Monika Meiler. Inhalt

Keynote Der offene Ansatz: Open Source basiertes ALM ganz praktisch

Übersicht über das OSS-Recht

Tutorium Rechnerorganisation

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Elementare Datentypen in C++

Graphisches Entwicklungslinien- und Aufgaben-Tracking für Subversion in Verbindung mit ALM Tool Suiten

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

8. Generics Grundlagen der Programmierung 1 (Java)

Welche Informatik-Kenntnisse bringen Sie mit?

Propädeutikum. Dipl.-Inf. Frank Güttler

Programmieren in C/C++ und MATLAB

UC4 Rapid Automation HP Service Manager Agent Versionshinweise

16. März 2016 artb5-v1.1

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Parameter-Updatesoftware PF-12 Plus

9 Zeiger (Pointer). Dynamischer Speicher

Programmentwicklung ohne BlueJ

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Übersicht. Generierung von IPv6-Paketen mit Scapy. Scapy GUI - Kurzvorstellung. Szameitpreiks - Beuth Hochschule für Technik Berlin

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Programmieren in C Signale, Bitfelder, Unionen Fehler, Debugging, Profiling

TelData. Version: A-Muster

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement

Übungen zur Vorlesung Systemsicherheit

Einige Grundlagen zu OpenMP

Hydroinformatik I: Hello World

GUI Programmierung mit GTK

Zusammenfassung des Handzettels für Programmieren in C

Einführung in C++ C++ Lektion Teil 2. Strukturen: Aufzählungstyp: Typen-Definition: Der Kompilationsprozess Werkzeuge: Tmake, doxygen, emacs, valgrind

Typische Speicherfehler in C

C++-Entwicklung mit Linux

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Dynamische Speicherverwaltung

If you have any issue logging in, please Contact us Haben Sie Probleme bei der Anmeldung, kontaktieren Sie uns bitte 1

Transkript:

Grundkurs C++ Debugging

Berühmte Software-Bugs 1947: Fehlfunktion des Mark II Relay Calculator aufgrund einer Motte. Grundkurs C++ 6

Berühmte Software-Fehler 1996: Ariane 5 muss 40 Sekunden nach dem Start gesprengt werden. Umwandlung der Geschwindigkeit von double nach signed integer -> Überlauf Software wurde von Ariane 4 übernommen, die diese Geschwindigkeit nicht erreichen konnte Schaden: ca. 370 Millionen USD Grundkurs C++ 7

Berühmte Software-Fehler 1994: Fehler in der Divisionsroutine des Pentium-Prozessors x = 4195835.0 y = 3145727.0 z = x - (x/y) * y Bugs in CPUs sind aufgrund der Komplexität der Designs auch heute üblich. Grundkurs C++ 8

Fehler zur Compile-Zeit Syntaxfehler (Vergessener Strichpunkt...) Inkompatible Datentypen Fehlende Dereferenzierung (Objekt statt Zeiger auf Objekt benutzt...) usw. Aber: Compiler können nicht alle Fehler erkennen. Grundkurs C++ 9

Fehler zur Laufzeit Zugriff außerhalb der Grenzen eines Arrays. Dynamisch allozierten Speicher nicht wieder freigegeben (Memory-Leak). Dynamisch allozierten Speicher mehrfach freigegeben. Dereferenzierung nicht-initialisierter Zeiger. Signed Integer Overflow usw. Grundkurs C++ 10

gcc Debug-Optionen Parameter -g Erzeugt Debugging-Symbole in der ausführbaren Datei. Parameter -Wall Aktiviert einen Satz von Warnungen, die i.d.r. leicht zu beheben sind. Parameter -W Aktiviert weitere Warnungen, die nicht von -Wall eingeschlossen werden. Parameter -Werror Warnungen werden wie Fehler behandelt und können so nicht mehr übersehen werden. Parameter -O2 Aktiviert Optimierungen (wichtig, da sonst manche Fehler nicht entdeckt werden). Grundkurs C++ 11

gcc Debug-Symbole GNU gdb (GDB) 7.0-ubuntu Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/thabigt/desktop/valgrind/test...done. (gdb) run Starting program: /home/thabigt/desktop/valgrind/test Program received signal SIGBUS, Bus error. 0x000000000040061a in main () Grundkurs C++ 12

gcc Debug-Symbole GNU gdb (GDB) 7.0-ubuntu Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/thabigt/desktop/valgrind/test...done. (gdb) run Starting program: /home/thabigt/desktop/valgrind/test Program received signal SIGBUS, Bus error. main () at test.c:23 23 *(&x + 100000) = 1; Grundkurs C++ 13

gcc Debug-Symbole Debug-Symbole in externen Libraries: Installieren der -dbg Pakete Kompilieren der Libraries mit -g Option Grundkurs C++ 14

gdb Benutzung von gdb am einfachsten durch Integration in Qt Creator. Grundkurs C++ 15

gdb Wichtige Befehle zur Ausführung in der Kommandozeile: gdb./executable run [Übergabeparameter] bt zeigt Stack an print Variablenname gibt Inhalt der Variable aus quit Grundkurs C++ 16

Valgrind Memcheck Entdeckt unerlaubte Speicherzugriffe, Memory-Leaks, doppelte Speicherfreigaben... Cachegrind Cache-Profiler Callgrind Cachegrind mit zusätzlichen Aufrufstatistiken Massif Heap-Profiler Helgrind Thread-Debugger Grundkurs C++ 17

Valgrind Memcheck void f(void) { int* x = new int[10]; x[10] = 0; } int main(void) { f(); return 0; } valgrind --leak-check=yes./main Grundkurs C++ 18

Valgrind Memcheck ==13211== Memcheck, a memory error detector ==13211== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al. ==13211== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info ==13211== Command:./exec ==13211== ==13211== Invalid write of size 4 ==13211== at 0x40088E: f() (main.cpp:4) ==13211== by 0x4008A8: main (main.cpp:9) ==13211== Address 0x595e068 is 0 bytes after a block of size 40 alloc'd ==13211== at 0x4C27939: operator new[](unsigned long) (vg_replace_malloc.c:305) ==13211== by 0x40088D: f() (main.cpp:3) ==13211== by 0x4008A8: main (main.cpp:9) Grundkurs C++ 19

Valgrind Memcheck ==13211== HEAP SUMMARY: ==13211== in use at exit: 40 bytes in 1 blocks ==13211== total heap usage: 1 allocs, 0 frees, 40 bytes allocated ==13211== ==13211== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==13211== at 0x4C27939: operator new[](unsigned long) (vg_replace_malloc.c:305) ==13211== by 0x40088D: f() (main.cpp:3) ==13211== by 0x4008A8: main (main.cpp:9) ==13211== ==13211== LEAK SUMMARY: ==13211== definitely lost: 40 bytes in 1 blocks ==13211== indirectly lost: 0 bytes in 0 blocks ==13211== possibly lost: 0 bytes in 0 blocks ==13211== still reachable: 0 bytes in 0 blocks ==13211== suppressed: 0 bytes in 0 blocks Grundkurs C++ 20

Valgrind Integration in Qt Creator Grundkurs C++ 21

Valgrind und gdb Integration in Qt Creator Anleitung unter: http://doc.qt.io/qtcreator/creator-debugging.html Grundkurs C++ 22

Valgrind Callgrind valgrind --tool=callgrind./main Erzeugt Datei callgrind.out.[prozess-id] Kann mit kcachegrind visualisiert werden. Grundkurs C++ 23

Valgrind Callgrind Grundkurs C++ 24

Valgrind - Probleme Programme laufen bis zu 100-mal langsamer ab. Das kann besonders bei echtzeitfähiger Software zu neuen Problemen führen. Überwältigende Zahl von Ausgaben vor allem durch externe Bibliotheken. Diese können durch sog. Suppression-Dateien unterdrückt werden. Grundkurs C++ 25