Tracepoints und Watchpoints

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.

previous    contents     next

Peter Junglas 18.10.1993