Puedo conjunto de datos de punto de interrupción en tiempo de ejecución en el Sistema de C (o en la Llanura de Vainilla C++)?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Tengo una clase en el sistema-C con algunos miembros de datos tales como:

long double x[8];

Estoy inicializando en la construcción de este tipo:

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

Pero la primera vez que lo uso en mi código me han basura allí.

Debido a la forma en que el sistema está construido que no se puede conectar a un depurador fácilmente.Hay métodos para datos de punto de interrupción en el código para que me dice donde en el código de las variables fueron realmente ha cambiado, pero sin enganchar un depurador?

Editar:@Prakash:En realidad, esto es un error tipográfico en el pregunta, pero no en mi código...Gracias!

¿Fue útil?

Solución

Usted podría tratar de iniciar un segundo hilo que gira, buscando cambios en la variable:


#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]);

Esto elevará una señal SIGTRAP a su aplicación cuando alguno de los valores de x no es cero.

Otros consejos

Sólo uso printk/syslog.

Es anticuado, pero super duper fácil.

Seguro, va a ser basura!

El código debe de haber sido el

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

EDITAR:Oops, lo Siento por subestimar ;)

@Frank

En realidad, que me permite registro de depuración imprime a un archivo.Lo que estoy buscando es algo que me deja imprimir algo, cuando una variable cambia, sin mí explícitamente buscando la variable.

¿ Los puntos de interrupción condicionales?Usted podría tratar de diversas condiciones como primer elemento de valor es cero o distinto de cero, etc??

Eso suponiendo que fácilmente se puede conectar a un depurador.El punto es que sólo tengo una biblioteca, pero el ejecutable que lo vinculó en no está fácilmente disponible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top