Hochschule Fulda – FB AI Wintersemester 2014/15

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Hochschule Fulda – FB ET Sommersemester 2010
Forschungszentrum caesar
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Hochschule Fulda – FB ET Sommersemester 2010
Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester Peter.
Die Skriptsprache Perl (5) Wolfgang Friebel DESY Zeuthen.
Das erste Programm (Folie 16)
EDV1 - Komplexe Datentypen
Einführung in Visual C++
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Arduino Kurs Abend 2.
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Grundlagen C 5
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Ausflug printf() Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Grundlagen C 3
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C Sortieren, Suchen
Hochschule Fulda – FB AI Sommersemester 2014
C Tutorium – Debugging & Tracing – Knut Stolze. 2 Agenda Debugging & Debugger Tracing.
Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
C / C++ für das Internet der Dinge und Hausautomatisierung Arduino Uno / Nano / … Input, Interrupts, Timer, Sleepmode Hochschule Fulda – FB AI Sommersemester.
Programmieren in C Annäherung an C
Programmieren in C Dateien
Programmieren in C Dynamische Listen / Bäume
Konstruktoren.
Programmieren in C Einführung
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Programmieren in C / C++ Erste Schritte mit C++ Klassen und Objekte
Programmieren in C Grundlagen C 2
Programmieren in C Grundlagen C 1
Programmieren in C / C++ Software Serial, Bluetooth
AlgoDat Fragen zu Vorlesung und Klausur
Hochschule Fulda – FB AI Sommersemester 2017
Programmieren in C Wie speichert C
Projektmodul DM Kurze Einführung C-Programmierung
Programmieren in C Module und Bibliotheken
Einführung in die Programmierung
Variable: typ varName = Wert Kiste: Art Aufschrift  Inhalt
Einführung in die Programmierung
Grundlagen der OO-Programmierung in C#
Einführung in die Programmierung
 Präsentation transkript:

Programmieren in C Signale, Bitfelder, Unionen Fehler, Debugging, Profiling Hochschule Fulda – FB AI Wintersemester 2014/15 http://c-ai.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Signale 1 Signal  Systemnachricht an einen Prozess vergleichbar mit einem Interrupt ausgelöst z.B. vom Nutzer ... Abbruch (Ctrl-C, SIGINT) Programmstop (SIGKILL) ... oder vom System Timer (SIGALRM) Programmende (SIGTERM) #include <signal.h> Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Signale 2 einige Signale: SIGINT – Unterbrechung (meist Ctrl-C) SIGHUP – Programmende SIGKILL – Programm beenden SIGALRM – Timer abgelaufen Signale können abgefangen werden: void handler(int sig) { ... } ... signal(SIGALRM, handler); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Signale 3 signal.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Signale 4 Timerfunktionen alarm(int nsec) löst nach nsec Sekunden ein Signal SIGALRM aus: void alrmhandler() { printf("SIGALRM!\n"); } ... signal(SIGALRM, alrmhandler); alarm(5); ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Signale 5 alarm.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Signale 6 Feinere Auflösung mit Intervall-Timer #include <sys/time.h> Datentypen struct timeval { time_t tv_sec; /* Sekunden */ suseconds_t tv_usec; /* Microsek. */ }; struct itimerval { struct timeval it_interval; struct timeval it_value; }; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Signale 7 Funktionen setitimer(int w, struct itimerval *v, struct itimerval *ov) getitimer(int w, struct itimerval *v) Werte für w ITIMER_REAL Systemuhr/-zeit ITIMER_VIRTUAL Prozesszeit Beispiel: struct itimerval it; it.it_value.tv_sec = 2; /* 2 Sek. */ it.it_value.tv_usec = 0; /* Start */ it.it_interval.tv_sec = 0; /* 0,5 Sek */ it.it_interval.tv_usec = 500000; /* Interv. */ setitimer(ITIMER_REAL, &it, NULL); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bitfelder 1 Bitfelder  Elemente vom struct-Typ Einzelelemente: int oder unsigned int gedacht für hardwarenahe Programmierung Problem: compilerabhängig  nicht portabel! Beispiel: typedef struct _iodev { /* Bitfeld */ unsigned int rflag:1; /* 1 Bit: Writeflag */ unsigned int wflag:1; /* 1 Bit: Readflag */ unsigned int d1:2; /* Dummy */ unsigned int type:2; /* 2 Bit: Geraetetyp */ unsigned int d2:2; /* Dummy */ unsigned int data:8; /* 8 Bit: Datenbyte */ } iodev; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bitfelder 2 Speicherung eines Bitfelds Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bitfelder 3 bitfeld.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 1 union: spezielle Art von struct anderer Name: varianter Rekord Speichern der Elemente in union nicht nacheinander, sondern übereinander union-Elemente teilen sich Speicherplatz sinnvoll bei gleichartigen Objekten, die aber verschiedenen Typs sein können union { /* Union: */ char c; /* char */ short s; /* short */ int i; /* int */ } u; /* teilen sich Platz */ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 2 Speicherung von struct und union Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 3 union.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 4 union oft Element in einem struct Typ des Elements in union muss definiert sein  eigenes Typelement im struct Beispiel struct number { /* Struct Zahl */ byte typ; /* Typ union-Element */ union { /* Union: */ byte b; /* byte */ short s; /* short */ int i; /* int */ } u; }; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 5 Zugriff auf union: struct number n; ... switch(n.typ) { case BYTE: dobyte(n.u.b); break; case SHORT: doshort(n.u.s); break; case INT: doint(n.u.i); break; } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 6 Beispiel: mydraw4.c #define LINE 0x01 /* Typ Linie */ #define RECT 0x02 /* Typ Rechteck */ #define CIRCLE 0x04 /* Typ Kreis */ ... typedef struct _obj { /* Objekt allgemein */ int n; /* Objektnummer */ int f; /* Loeschflag */ int t; /* Typ des Objekts */ union { line l; /* Linie */ rect r; /* Rechteck */ circle c; /* Kreis */ } o; } object; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Unionen 7 mydraw4.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Syntaxfehler 1 C hat kein sinnvolles error recovery  eine sehr schlechte Fehlerbehandlung beim Übersetzen nach Auftreten von Syntaxfehlern der C-Compiler setzt nach einem Fehler nicht neu auf und tut so, als ob es keinen Fehler gegeben hat, sondern produziert eine Anzahl, manchmal eine wahre Fülle von Folgefehlern  tatsächliche Fehler oft schwer zu finden  Fehlererkennung und –korrektur mühsam Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Syntaxfehler 2 treten nur ein oder ganz wenige Fehler auf  Fehlersuche in oder vor der Zeile, die in der Fehlermeldung angegeben ist treten viele und oft unsinnig erscheinende Fehler auf  Fehlersuche im Umfeld vor der Zeile, die in der Fehlermeldung angegeben ist  dann erneut kompilieren ... oder viel Glück!! Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 1 oft ist es mühsam, Syntaxfehler zu finden noch mühsamer  Laufzeitfehler finden intuitives Herangehen: zusätzliche Ausgaben in den Programmtext einstreuen ggfs. mit CPP-Direktiven #ifdef DEBUG printf("copy: %p %p\n", s1, s2); #endif übersetzen dann mit gcc –DDEBUG file.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 2 debug1.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 3 debug2.c - debug1.c mit CPP-Direktiven Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 4 das Verfahren ist mühsam und zeitaufwendig Alternative  Debugger nutzen Debugger: Werkzeug, unter dessen Kontrolle ein Programm gestartet und während des Programmslaufs untersucht werden kann für gcc (und CodeBlocks)  Debugger gdb Kode muss für Debugging instrumentiert werden: gcc –g file.c –o file dann Debugger aufrufen: gdb file Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 5 gdb – interaktive Shell mit vielen schönen Features innerhalb CodeBlocks weitgehend durch die grafische Oberfläche angesteuert wichtige Kommandos help help topic run wenn das Programm läuft, alles ok! bei Fehlern ??? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 6 Wichtige Mechanismen Breakpoints – Unterbrechung an definierten Stellen (z.B. Zeilennummer, Funktion) break file.c:12 break func Watchpoints – Unterbrechung bei Änderung des Werts einer Variablen watch varname Anzeigen von Variablenwerten print varname Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Laufzeitfehler 7 Breakpoint setzen und starten break func run Unterbrechung bei Breakpoint print varname continue schrittweises Vorgehen step Debugger beenden quit Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Profilanalyse oft notwendig: Laufzeitverhalten von Programmen zu überprüfen wo wird die Laufzeit verbraucht? wo ist Optimierung notwendig / möglich?  Profilanalyse des Programms Instrumentierung mit -pg bei Neucompilieren gcc -pg prog.c -o prog Starten des Programms  gmon.out prog Profilanalyse mit gprof, prog, gmon.out gprof prog Programmieren in C - Peter Klingebiel - HS Fulda - DVZ