+ All Categories
Home > Documents > TotalView Debugger

TotalView Debugger

Date post: 01-Jan-2016
Category:
Upload: ray-dorsey
View: 38 times
Download: 2 times
Share this document with a friend
Description:
TotalView Debugger. Vorgestellt von Marco Dyballa mail: [email protected]. Gliederung. 1 Motivation 2 TotalView – Ein Überblick 3 Prozess-/Thread-Modell von TotalView 4 Multi-Prozess/Multi-Thread-Debugging – Ein Beispiel 5 Fazit. 1. Motivation. - PowerPoint PPT Presentation
49
WIRTSCHAFTSINFORMATIK Westfälische Wilhelms- Universität Münster WIRTSCHAFTS INFORMATIK TotalView Debugger TotalView Debugger Vorgestellt von Marco Dyballa mail: [email protected]
Transcript
Page 1: TotalView Debugger

WIR

TS

CH

AF

TS

INF

OR

MA

TIK

WestfälischeWilhelms-Universität Münster

WIRTSCHAFTSINFORMATIK

TotalView DebuggerTotalView Debugger

Vorgestellt von Marco Dyballa

mail: [email protected]

Page 2: TotalView Debugger

2

WIRTSCHAFTSINFORMATIK

GliederungGliederung

1 Motivation

2 TotalView – Ein Überblick

3 Prozess-/Thread-Modell von TotalView

4 Multi-Prozess/Multi-Thread-Debugging – Ein Beispiel

5 Fazit

Page 3: TotalView Debugger

3

WIRTSCHAFTSINFORMATIK

1. Motivation1. Motivation

Debugger stellen für die Qualitätssicherung in der Softwaretechnik ein unverzichtbares Instrument dar

TotalView hebt sich insbesondere durch die Unterstützung Debuggens von Parallelen Programmen von anderen Debuggern ab

Auf die allgemeinen Funktionen eines Debuggers soll hier nicht näher eingegangen werden, sondern lediglich auf die besonderen Elemente von TotalView

Page 4: TotalView Debugger

4

WIRTSCHAFTSINFORMATIK

2 TotalView – Ein Überblick (1/2)2 TotalView – Ein Überblick (1/2)

Features Übliche Debugfunktionalität Paralleles Debuggen (Multi-Thread/Multi-Prozess) Remote-Debugging über ein Netzwerk Graphische Visualisierung von Daten in 2D oder 3D Erhältlich für Unix-/Linuxsysteme auf unterschiedlichen Plattformen

HP Alpha Tru64 UNIX

IBM RS/6000 Power AIX

Sun SPARC Solaris

SGI IRIX 6.x MIPS

u.a. Programmiersprachen C/C++, Fortran und Assembler Unterstützung mehrerer Compiler-Distributionen

Page 5: TotalView Debugger

5

WIRTSCHAFTSINFORMATIK

2 TotalView – Ein Überblick (2/2)2 TotalView – Ein Überblick (2/2)

Testumgebung TotalView V6.4 (www.etnus.com) Suse Linux 9.0 GNU-C/C++-Compiler V3.3.2 AMD-AthlonXP 2400+ (Single-Prozessor)

Page 6: TotalView Debugger

6

WIRTSCHAFTSINFORMATIK

2 Die Prozessansicht (1/2)2 Die Prozessansicht (1/2)

Page 7: TotalView Debugger

7

WIRTSCHAFTSINFORMATIK

2 Die Prozessansicht (2/2)2 Die Prozessansicht (2/2)

Go Das Programm wird ausgeführt Halt Das Programm wird sofort angehalten Next Die aktuelle Programmzeile wird ausgeführt Step Wie Next, es wird jedoch in Funktionen verzweigt Out Das Programm wird bis Funktionsende ausgeführt Run To Das Programm wird bis zu einer bestimmten Zeile ausgeführt NextI Führt die nächste Instruktion auf Assemblerebene aus StepI Wie NextI, es wird jedoch in Subroutinen verzweigt

P- / P+ Wechselt zum vorherigen/nächsten Prozess T- / T+ Wechselt zum vorherigen/nächsten Thread

Mit der linken oberen Auswahlbox wird die Menge von Prozessen oder Threads

festgelegt, auf die sich die Kommandos beziehen (die Arena).

Page 8: TotalView Debugger

8

WIRTSCHAFTSINFORMATIK

2 Breakpoints (1/4)2 Breakpoints (1/4)

TotalView unterstützt vier Arten von Breakpoints

1. Breakpoints (Standard) Der gesamte Prozess wird angehalten

2. Watchpoints Prozess wird angehalten, wenn sich der Wert einer Variablen ändert

3. Evaluationpoints Ausführung vorgegebener Code-Fragmente ohne Unterbrechung

4. Barrieren Ein Thread/Prozess wird an dieser Stelle angehalten und erst wieder

freigegeben, wenn alle Threads/Prozesse eines Sets diese Barriere erreicht haben

Page 9: TotalView Debugger

9

WIRTSCHAFTSINFORMATIK

2 Breakpoints (2/4)2 Breakpoints (2/4)

Evaluationpoint Ausführung von Code-Fragmenten in C/C++, Fortran oder Assembler

Ausführung spezieller Statements von TotalView, eingeleitet mit $

Beispiel: Schleife alle 20 Durchläufe unterbrechen

$count 20

Beispiel: Ausführung anhalten, wenn eine Variable einen bestimmten Wert erreicht

if(counter == 50) $stop

Page 10: TotalView Debugger

10

WIRTSCHAFTSINFORMATIK

2 Breakpoints (3/4)2 Breakpoints (3/4)

Watchpoint Auch Memory-Breakpoint genannt, weil streng genommen eine

Speicherzelle überwacht wird, nicht der symbolische Variablenname Lebensdauer von Objekten/Variablen beachten!

Zugriff auf alten und neuen Wert der Variable über Statements $oldval und $newval

Bedingte und nicht bedingte Watchpoints Nicht bedingt: die Programmausführung wird immer unterbrochen, wenn

sich der Wert der Speicherzelle ändert

Bedingt: die Programmausführung wird nach positiver Prüfung eines Statements unterbrochen Evaluationspoint

if($newval == 50) $stop

Page 11: TotalView Debugger

11

WIRTSCHAFTSINFORMATIK

2 Breakpoints (4/4)2 Breakpoints (4/4)

Watchpoint: Lebensdauer von Objekten beachten

Beispiel:[1] for(int i=0; i<100; i++) { printf(„%d“, i); }[2] for(int j=0; j<100; j++) { printf(„%d“, j); }

Watchpoint auf i: if($newval == 50) $stop

Die Ausführung stoppt, sobald i den Wert 50 enthält Nach Verlassen des Blocks in Zeile [1] ist i nicht mehr bekannt, d.h.

der Speicher wird freigegeben Beim Eintritt in [2] wird j angelegt und erhält den Speicherbereich,

den vorher i innehatte Da der Watchpoint noch existiert, wird die Ausführung angehalten,

sobald nun j den Wert 50 enthält war nicht beabsichtigt!

Page 12: TotalView Debugger

12

WIRTSCHAFTSINFORMATIK

3 Prozess-/Thread-Modell3 Prozess-/Thread-Modell

3 Prozess-/Thread-Modell

3.1 Gruppenbildung3.1.1 Prozessgruppen

3.1.2 Threadgruppen

3.1.3 Zusammenhänge der Gruppen

3.2 Auswirkungen von Kommandos3.2.1 GOI, POI, TOI und die Arena

3.2.2 Auswirkungsweite von Kommandos

3.3 Barrieren

Page 13: TotalView Debugger

13

WIRTSCHAFTSINFORMATIK

3.1 Gruppenbildung (1/5)3.1 Gruppenbildung (1/5)

Prozesse und Threads werden in TotalView in jeweils zwei Gruppen

eingeteilt:

Über die Gruppenzugehörigkeit bestimmt TotalView, welche Prozesse und

Threads von einem Kommando betroffen sind.

Prozessgruppen Threadgruppen

1. Control Group

2. Share Group

1. Workers Group

2. Lockstep Group

Page 14: TotalView Debugger

14

WIRTSCHAFTSINFORMATIK

3.1.1 Prozessgruppen (2/5)3.1.1 Prozessgruppen (2/5)

Control Group Enhält den Elterprozess alle zugehörigen Kindprozesse

via fork() erzeugt (beruhen alle auf demselben Sourcecode)

via execve() erzeugt (evtl. anderer Sourcecode, andere Programme)

Share Group Prozesse der Control Group, die auf demselben Executable beruhen

Control und Share Group unterscheiden sich nur dann, wenn

Kindprozesse mit execve()erzeugt wurden, weil dann unterschiedliche

Executables zugrunde liegen zwei Share Groups, eine Control Group

Page 15: TotalView Debugger

15

WIRTSCHAFTSINFORMATIK

3.1.2 Threadgruppen (3/5)3.1.2 Threadgruppen (3/5)

Workers Group Enthält alle Arbeitsthreads der Control Group

vom Programm erzeugte Threads

Service-Threads, die Dienste für andere Threads bereitstellen

keine Manager-Threads

Lockstep Group Enthält alle angehaltenen Threads einer Share Group, die

am selben Programmzähler angehalten wurden und sich somit

an derselben Stelle innerhalb des Programms befinden

Page 16: TotalView Debugger

16

WIRTSCHAFTSINFORMATIK

3.1.3 Zusammenhänge Prozessgruppen (4/5)3.1.3 Zusammenhänge Prozessgruppen (4/5)

Zusammenhang zw. Prozess, Control Group und Share Group

Page 17: TotalView Debugger

17

WIRTSCHAFTSINFORMATIK

3.1.3 Zusammenhänge Threadgruppen (5/5)3.1.3 Zusammenhänge Threadgruppen (5/5)

Zusammenhänge zwischen Threads und Gruppen

Page 18: TotalView Debugger

18

WIRTSCHAFTSINFORMATIK

3.2.1 GOI, POI, TOI und die Arena3.2.1 GOI, POI, TOI und die Arena

Ermittlung der von einem Kommando betroffenen Prozesse/Threads

GOI – Group of Interest POI – Process of Interest TOI – Thread of Interest

Zentrale Rolle

Ist der Thread, auf den sich ein Kommando direkt bezieht

Über den TOI werden POI und GOI ermittelt:

TOI Lockstep Group Share Group Control Group Arena

Menge von Threads, Prozessen und Gruppen, die von einem Kommando betroffen sind

Page 19: TotalView Debugger

19

WIRTSCHAFTSINFORMATIK

3.2.2 Auswirkungsweite von Kommandos3.2.2 Auswirkungsweite von Kommandos

Die Auswirkungsweite von Kommandos kann in der

Prozessansicht eingestellt werden:

Unterschieden werden drei Reichweiten

1. Thread Width

2. Process Width

3. Group Width

Page 20: TotalView Debugger

20

WIRTSCHAFTSINFORMATIK

3.2.2 Auswirkungsweite von Kommandos3.2.2 Auswirkungsweite von Kommandos

Thread Width Nur der gewählte Thread wird gestartet (TOI)

Sobald der TOI sein Ziel erreicht, wird er angehalten, alle anderen Threads laufen weiter.

Process Width Prozessgruppe

Alle Threads des Prozesses werden gestartet

Sobald der TOI sein Ziel erreicht hat, werden er und alle anderen Threads des Prozesses angehalten

Threadgruppe Alle Threads der GOI werden gestartet

Sobald ein Thread der GOI sein Ziel erreicht, wird er angehalten

Wenn alle Threads der GOI ihr Ziel erreicht haben, wird der gesamte Prozess angehalten

Page 21: TotalView Debugger

21

WIRTSCHAFTSINFORMATIK

3.2.2 Auswirkungsweite von Kommandos3.2.2 Auswirkungsweite von Kommandos

Group Width Prozessgruppe

Alle Prozesse der Control Group werden gestartet

Erreicht ein Thread das Ziel, wird der Prozess angehalten

Fortsetzung, bis alle betroffenen Prozesse angehalten wurden

Threadgruppe: Alle Prozesse der Control Group werden gestartet

Erreicht ein Thread das Ziel, wird dieser angehalten, andere Threads des Prozesses laufen weiter

Sobald alle Threads der GOI angehalten wurden, werden alle Prozesse der Control Group angehalten

Page 22: TotalView Debugger

22

WIRTSCHAFTSINFORMATIK

3.3 Barrieren (1/3)3.3 Barrieren (1/3)

Barrieren Sinnvoll beim parallelem Debuggen

Zur Synchronisation mehrerer Prozesse/Threads

Legen die Threads fest, die bei Erreichen der Barriere angehalten werden sollen – When Hit, Stop

Legen die Threads fest, die nach Ausführung der Barriere zusätzlich angehalten werden sollen – When Done, Stop

Legen die Menge der Threads fest, die die Barriere erreicht habe müssen, damit alle gehaltenen Threads wieder freigegeben werden – Satisfaction Set

Page 23: TotalView Debugger

23

WIRTSCHAFTSINFORMATIK

3.3 Barrieren (2/3)3.3 Barrieren (2/3)

When Hit, Stop und When Done, Stop Group: Stoppt alle Threads der zugehörigen Control Group

Process: Stoppt alle Threads des zugehörigen Prozesses

Thread: Stoppt nur den gegenwärtigen Thread

Satisfaction Set Control: Alle Threads der Control Group müssen die Barriere

erreicht haben

Share: Alle Threads der Share Group müssen die Barriere erreicht haben

Workers: Alle Threads der Workers Group müssen die Barriere erreicht haben

Anm.: Korrektur zur Ausarbeitung!

Page 24: TotalView Debugger

24

WIRTSCHAFTSINFORMATIK

3.3 Barrieren (3/3)3.3 Barrieren (3/3)

Einstellungsdialog für Barrieren

Page 25: TotalView Debugger

25

WIRTSCHAFTSINFORMATIK

4 Multi-Prozess/Multi-Thread-Debugging4 Multi-Prozess/Multi-Thread-Debugging

4 Multi-Prozess/Multi-Thread-Debugging

4.1 Probleme beim parallelen Debuggen

4.2 Beispiel

Page 26: TotalView Debugger

26

WIRTSCHAFTSINFORMATIK

4.1 Probleme beim parallelen Debuggen4.1 Probleme beim parallelen Debuggen

Kommunikationsprobleme zwischen Prozessen oder Threads stellen eine der häufigsten Fehlerquellen bei der parallelen Programmierung dar

Kommunikation ist häufig abhängig vom Timing

Daraus resultiert für das parallele Debugging: Der Fehler tritt beim Debuggen nicht mehr auf

Durch verändertes Timing in den Debugversionen der Programme Das Anhalten eines Prozesses kann zu einem anderen

Kommunikationsverhalten führen

Page 27: TotalView Debugger

27

WIRTSCHAFTSINFORMATIK

4.2 Beispiel4.2 Beispiel

Problemstellung Eine Fraktalgrafik soll auf zwei Prozessoren berechnet werden

Hierzu werden drei Prozesse benötigt

zwei Arbeitsprozesse, Worker1 und Worker2

ein Hauptprozess, der die Aufgaben verteilt, der Farmer

Berechnung erfolgt Zeilenweise für insgesamt 480 Zeilen

Die Worker-Prozesse beruhen auf der Datei fraktal, der Farmer-Prozess auf der Datei fraktalmain

Die Worker-Prozesse machen dann unter sich aus, wer welche Aufgabe hat

Page 28: TotalView Debugger

28

WIRTSCHAFTSINFORMATIK

4.2 Beispiel4.2 Beispiel

Kommunikation zwischen den Prozessen bool SendMsg(const char* Port, const char* Msg)

sendet Nachricht Msg an Kommunikationsport Port bool RecvMsg(const char* Port, char* Msg)

prüft ob am Kommunikationsport Port eine Nachricht vorliegt und speichert diese gegebenenfalls in Msg

Port Nachricht Beschreibung

Worker1

Worker2

Compute <Line> Weist einen Worker an, Zeile <Line> zu berechnen

Quit Weist einen Worker an, sich zu beenden

Worker1Answer

Worker2Answer

Ready Meldet dem Farmer, dass ein Worker seine Berechnung beendet hat und bereit ist

Exited Meldet dem Farmer, das der Worker beendet wurde

Page 29: TotalView Debugger

29

WIRTSCHAFTSINFORMATIK

4.2 Beispiel – Die Worker4.2 Beispiel – Die Worker

void Worker(const char* Name) { char Buffer[1024]; // Puffer für empfangene Nachrichten […] // Portadresse aus Namen bilden for(;;) {

while(!RecvMsg(Name, Buffer)); // Auf Nachricht warten

char Msg[128]; int Line; sscanf(Buffer, "%s %d", Msg, &Line); // Nachricht zerlegen

if(strcmp(Buffer, "Compute") == 0) // Nachricht auswerten Compute(Line); else if(strcmp(Buffer, "Quit") == 0) { if(strcmp("Worker1", Name) == 0)

SendMsg("Worker1Answer", "Exited"); else if(strcmp("Worker2", Name) == 0)

SendMsg("Worker1Answer", "Exited"); // FEHLER !! return;

}SendMsg(Port, "Ready"); // Farmer melden, dass wir bereit sind

}}

Page 30: TotalView Debugger

30

WIRTSCHAFTSINFORMATIK

4.2 Beispiel – Der Fehler4.2 Beispiel – Der Fehler

Feststellung: Der Farmerprozess terminiert nicht!

Mögliche Gründe1. Der Farmer merkt nicht, dass die letzte Zeile schon berechnet wurde und

sendet keine Quit-Nachrichten an die Worker. Da er dadurch auch keine Exited-Nachrichten der Worker erhält, terminiert er nicht.

2. Mindestens einer der Worker erhält keine Quit-Nachricht oder sendet keine Exited-Nachricht.

Beide Möglichkeiten lassen sich dadurch überprüfen, indem wir an den

Kommunikationsstellen der Worker überprüfen, welche Nachrichten empfangen

und gesendet werden.

Page 31: TotalView Debugger

31

WIRTSCHAFTSINFORMATIK

4.2 Vor dem Start4.2 Vor dem Start

Die angebundenen Prozesse

Page 32: TotalView Debugger

32

WIRTSCHAFTSINFORMATIK

4.2 Die Control Groups vor dem Start4.2 Die Control Groups vor dem Start

Farmer Worker

Page 33: TotalView Debugger

33

WIRTSCHAFTSINFORMATIK

4.2 Die Share Groups vor dem Start4.2 Die Share Groups vor dem Start

Farmer Worker

Page 34: TotalView Debugger

34

WIRTSCHAFTSINFORMATIK

4.2 Die Worker Groups vor dem Start4.2 Die Worker Groups vor dem Start

Farmer Worker

Page 35: TotalView Debugger

35

WIRTSCHAFTSINFORMATIK

4.2 Beispiel – Barriere setzen4.2 Beispiel – Barriere setzen

Barrieren in Worker-Funktion an den Kommunikations-

stellen setzen

Page 36: TotalView Debugger

36

WIRTSCHAFTSINFORMATIK

4.2 Beispiel – Barriere einstellen4.2 Beispiel – Barriere einstellen

Einstellungen der Barriere

Page 37: TotalView Debugger

37

WIRTSCHAFTSINFORMATIK

4.2 Nach dem Start4.2 Nach dem Start

Die angebundenen Prozesse

Page 38: TotalView Debugger

38

WIRTSCHAFTSINFORMATIK

4.2 Prozessansicht nach dem Start4.2 Prozessansicht nach dem Start

Page 39: TotalView Debugger

39

WIRTSCHAFTSINFORMATIK

4.2 Die Control Groups nach dem Start4.2 Die Control Groups nach dem Start

Farmer Worker

Page 40: TotalView Debugger

40

WIRTSCHAFTSINFORMATIK

4.2 Die Share Groups nach dem Start4.2 Die Share Groups nach dem Start

Farmer Worker

Page 41: TotalView Debugger

41

WIRTSCHAFTSINFORMATIK

4.2 Die Worker Groups nach dem Start4.2 Die Worker Groups nach dem Start

Farmer Worker

Page 42: TotalView Debugger

42

WIRTSCHAFTSINFORMATIK

4.2 Die Lockstep Groups nach dem Start4.2 Die Lockstep Groups nach dem Start

Farmer Worker

Anm.: Die Lockstep Groups der Worker sind vom Inhalt identisch, mit der Ausnahme, dass sie unterschiedliche TOIs besitzen.

Page 43: TotalView Debugger

43

WIRTSCHAFTSINFORMATIK

4.2 Fehlersuche Teil 14.2 Fehlersuche Teil 1

Wir stellen fest, dass die Worker Nachrichten vom Farmer empfangen

Daher wollen wir feststellen, ob die Worker auch korrekt ihre Nachrichten an den Farmer senden

Hierzu: Deaktivieren der ersten Barriere

Beide Prozesse weiterlaufen lassen

Beide Prozesse stoppen, sobald sie an ihren entsprechenden (zweiten) Barrieren angelangt sind (an den SendMsg-Zeilen)

Page 44: TotalView Debugger

44

WIRTSCHAFTSINFORMATIK

4.2 Nach dem Start 24.2 Nach dem Start 2

Die angebundenen Prozesse

Page 45: TotalView Debugger

45

WIRTSCHAFTSINFORMATIK

4.2 Nach dem Start 2 – Worker 14.2 Nach dem Start 2 – Worker 1

Page 46: TotalView Debugger

46

WIRTSCHAFTSINFORMATIK

4.2 Nach dem Start 2 – Worker 2 (4.2 Nach dem Start 2 – Worker 2 (FEHLERFEHLER))

Page 47: TotalView Debugger

47

WIRTSCHAFTSINFORMATIK

4.2 Nach dem Start 2 – Lockstep Groups4.2 Nach dem Start 2 – Lockstep Groups

Worker 1 Worker 2

Page 48: TotalView Debugger

48

WIRTSCHAFTSINFORMATIK

FazitFazit

TotalView ist ein universeller, komplexer Debugger

Unterstützung vieler Plattformen

Nicht gebunden an eine Compiler-Distribution

TotalView eignet sich besonders zum Debuggen paralleler Programme

Page 49: TotalView Debugger

49

WIRTSCHAFTSINFORMATIK

Alles ist mal zu EndeAlles ist mal zu Ende

Ich bedanke mich für

Eure Aufmerksamkeit!


Recommended