0

我在 system-C 中有一个类,其中包含一些数据成员:

long double x[8];

我在这样的构造中初始化它:

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

但是我第一次在我的代码中使用它时,那里有垃圾。

由于系统的构建方式,我无法轻松连接调试器。是否有任何方法可以在代码中设置数据断点,以便它告诉我变量在代码中实际更改的位置,但无需连接调试器?

编辑:@Prakash:实际上,这是问题中的错字,但在我的代码中没有……谢谢!

4

6 回答 6

0

当然,这将是垃圾!

代码应该是

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

编辑:哎呀,对不起低估了;)

于 2008-09-11T11:49:09.873 回答
0

只需使用printk/syslog

这是老式的,但超级简单。

于 2008-09-11T11:52:34.343 回答
0

@坦率

实际上,这让我可以将调试打印记录到文件中。我正在寻找的东西可以让我在变量发生变化时打印一些东西,而无需我明确地寻找变量。

于 2008-09-11T12:47:14.103 回答
0

条件断点怎么样?您可以尝试各种条件,例如第一个元素值为零或非零等?

于 2008-09-11T12:58:32.267 回答
0

这是假设我可以轻松连接调试器。重点是我只有一个库,但链接它的可执行文件并不容易获得。

于 2008-09-11T13:07:58.797 回答
0

您可以尝试启动第二个旋转的线程,寻找变量的变化:


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

只要任何 x 值不为零,这都会向您的应用程序发出 SIGTRAP 信号。

于 2008-09-30T18:27:21.453 回答