Ein Tracepoint verhält sich sehr ähnlich zu einem Breakpoint, nur daß
die Programmausführung nicht angehalten, sondern nur eine Meldung über
das Erreichen des Tracepoints ausgegeben wird. Damit kann man auf einfache
Weise die Programmausführung überwachen. Die zugehörigen Kommandos sind
trace line/routine
info trace
remove event .
Ein Watchpoint überwacht im Gegensatz zu Break- und Tracepoints nicht eine
spezielle Stelle im Programm, sondern im Speicher: Er hält die
Programmausführung - mit einer entsprechenden Meldung - an, wenn sich der
Wert einer Variablen oder eines beliebigen anderen Speicherbereiches
ändert. Das ist z.B. dann nützlich, wenn sich der Wert einer Variablen
''mysteriöserweise'' ändert, ohne daß entsprechende Anweisungen im
betrachtetetn Programmabschnitt vorkommen. Dieser Fall tritt vor allem in C
gelegentlich auf, insbesondere bei falscher Pointerarithmetik oder bei
String-Manipulationen mit Strings, für die zu wenig Speicherplatz
bereitgestellt wurde. Allerdings führt ein Watchpoint zu einer erheblichen
Verlangsamung des Programmablaufs; daher sollte man zunächst mit einem
Breakpoint so dicht wie möglich an die zu überwachende Stelle herangehen
und dann erst einen Watchpoint setzen (bzw. ihn dann erst aktivieren,
s.u.).
Es gibt drei Möglichkeiten, den zu überwachenden Bereich anzugeben:
watch START
watch START..ENDE
watch START:ANZAHL .
Bei der ersten Version bezeichnet START einen Zeiger auf die zu
überwachende Variable, etwa ''watch &intvar'' in C oder ''watch LOC(I)'' in
Fortran. Das Ende des Bereichs wird durch den Typ der Variablen bestimmt.
Stattdessen kann man auch explizit die Endadresse oder die Anzahl der Bytes
des zu kontrollierenden Speicherbereichs angeben.
Mit ''info watch'' können Informationen zu allen Watchpoints angefordert
werden, mit ''remove event NR'' wird ein Watchpoint wieder gelöscht.
Peter Junglas 18.10.1993