Puis-je définir un point d'arrêt de données lors de l'exécution dans System C (ou dans Plain Vanilla C++) ?

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

  •  09-06-2019
  •  | 
  •  

Question

J'ai une classe en système-C avec quelques données membres en tant que telles :

long double x[8];

Je l'initialise dans la construction comme ceci :

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

Mais la première fois que je l'utilise dans mon code, j'ai des déchets.

En raison de la façon dont le système est construit, je ne peux pas connecter facilement un débogueur.Existe-t-il des méthodes pour définir un point d'arrêt de données dans le code afin qu'il m'indique où dans le code les variables ont été réellement modifiées, mais sans connecter un débogueur ?

Modifier:@Prakash :En fait, c'est une faute de frappe dans le question, mais pas dans mon code...Merci!

Était-ce utile?

La solution

Vous pouvez essayer de démarrer un deuxième thread qui tourne, recherchant des changements dans 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]);

Cela enverra un signal SIGTRAP à votre application chaque fois que l'une des valeurs x n'est pas nulle.

Autres conseils

Utilisez simplement printk/syslog.

C'est démodé, mais super simple.

Bien sûr, ce sera une poubelle !

Le code aurait dû être comme

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

MODIFIER:Oups, désolé d'avoir sous-estimé ;)

@Franc

En fait, cela me permet de consigner les impressions de débogage dans un fichier.Ce que je recherche, c'est quelque chose qui me permettra d'imprimer quelque chose chaque fois qu'une variable change, sans que je recherche explicitement la variable.

Que diriez-vous Points d'arrêt conditionnels?Vous pouvez essayer diverses conditions comme la valeur du premier élément est nulle ou non nulle, etc ??

Cela suppose que je puisse facilement connecter un débogueur.Le fait est que je n’ai qu’une bibliothèque, mais l’exécutable qui l’a lié n’est pas facilement disponible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top