Kann ich eine Daten-breakpoint in der runtime im System C (oder Plain-Vanilla C++)?
Frage
Ich habe eine Klasse in system-C mit einigen Daten, die die Mitglieder als solche:
long double x[8];
Ich bin initialisieren es in der Konstruktion wie diese:
for (i = 0; i < 8; ++i) {
x[i] = 0;
}
Aber das erste mal, dass ich es in meinem code habe ich Müll dort.
Wegen der Art, wie das system aufgebaut ist ich kann keine Verbindung mit einem debugger leicht.Gibt es irgendwelche Methoden, um einen Daten-Haltepunkt in den code so, dass er mir sagt, wo im code die Variablen wurden wirklich geändert, aber ohne Einhaken bis ein debugger?
Edit:@Prakash:Eigentlich ist dies ein Tippfehler in der Frage, aber nicht in meinem code...Vielen Dank!
Lösung
Sie könnten versuchen, einen zweiten Thread starten, die sich dreht, um Änderungen in der Variablen suchen:
#include <pthread.h>
void *ThreadProc(void *arg)
{
volatile long double *x = (volatile long double *)arg;
while(1)
{
for(int i = 0; i < 8; i++)
{
if(x[i] != 0)
{
__asm__ __volatile__ ("int 3"); // breakpoint (x86)
}
}
return 0; // Never reached, but placate the compiler
}
...
pthread_t threadID;
pthread_create(&threadID, NULL, ThreadProc, &x[0]);
Dies wird ein SIGTRAP Signal an Ihre Anwendung erhöhen, wenn eine der x-Werte nicht gleich Null ist.
Andere Tipps
Verwenden Sie einfach printk / syslog .
Es ist altmodisch, aber super duper einfach.
Sicher, es wird Müll!
Der Code sollte als
habenfor (i = 0; i < 8; ++i) {
x[i] = 0;
}
EDIT: Oops, Sorry für zu unterschätzen;)
@Frank
Eigentlich, das lässt mich Debug druckt in einer Datei protokolliert. Was ich suche ist etwas, das ich etwas drucken lassen, wenn eine Variable ändert, ohne mich ausdrücklich für die Variable an.
Wie wäre es? Bedingte Haltepunkte ? Sie könnten für verschiedene Bedingungen wie das erste Element Wert versuchen Null oder nicht Null, etc ??
Das ist vorausgesetzt, ich kann leicht einen Debugger anschließen. Der springende Punkt ist, dass ich nur eine Bibliothek, aber die ausführbare Datei, die damit verbunden in ist nicht ohne weiteres verfügbar.