2008-09-11 6 views
0

Ich habe eine Klasse in System-C mit einigen Datenelementen als solche:Kann ich einen Datenhaltepunkt in Runtime in System C (oder in normalem Vanilla C++) setzen?

long double x[8]; 

ich es in der Konstruktion wie diese bin Initialisierung:

for (i = 0; i < 8; ++i) { 
    x[i] = 0; 
} 

Aber das erste Mal, dass ich benutze es in Mein Code Ich habe dort Müll.

Aufgrund der Art, wie das System aufgebaut ist, kann ich einen Debugger nicht einfach verbinden. Gibt es Methoden zum Festlegen eines Datenhaltepunkts im Code, sodass er mir sagt, wo im Code die Variablen tatsächlich geändert wurden, aber ohne einen Debugger anzuhängen?

Edit: @Prakash: Eigentlich ist dies ein Tippfehler in der Frage, aber nicht in meinem Code ... Vielen Dank!

Antwort

0

könnten Sie 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 zu erhöhen, wenn eine der x-Werte nicht Null ist.

0

Sicher, es wird Müll!

sollte der Code

for (i = 0; i < 8; ++i) { 
    x[i] = 0; 
} 

EDIT gewesen, wie sie: Oops, Sorry für zu unterschätzen;)

0

printk/syslog Verwenden Sie einfach.

Es ist altmodisch, aber super duper einfach.

0

@Frank

Eigentlich, das lässt mich Debug druckt in einer Datei protokolliert. Nach was ich suche, ist etwas, das mich etwas drucken lässt, wann immer sich eine Variable ändert, ohne dass ich explizit nach der Variable suche.

0

Wie wäre es mit Conditional breakpoints? Sie könnten versuchen für verschiedene Bedingungen wie ersten Element Wert ist Null oder nicht Null, etc?

0

Das geht davon aus, dass ich einen Debugger problemlos verbinden kann. Der springende Punkt ist, dass ich nur eine Bibliothek habe, aber die ausführbare Datei, mit der sie verbunden ist, ist nicht ohne weiteres verfügbar.