Kann ich eine Daten-breakpoint in der runtime im System C (oder Plain-Vanilla C++)?

StackOverflow https://stackoverflow.com/questions/56340

  •  09-06-2019
  •  | 
  •  

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!

War es hilfreich?

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

haben
for (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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top