我有一类的系统-C的一些数据成员为:

long double x[8];

我的初始化它在建设这样的:

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

但我第一次使用它在我的代码我有垃圾存在。

因为这样的系统是建立我不能连接一个调试器容易。是否有任何方法来设置的一个数据断点在代码,以便它告诉我在哪里的代码变量的实际变化,但没有挂钩的一个调试器?

编辑:@Prakash:实际上,这是一个错误 的问题, 但不是在我的代码...谢谢!

有帮助吗?

解决方案

你可以试着开始的第二线旋转,寻找变化的变量:


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

这将提高SIGTRAP信你的应用程序,只要任何的x值不是零。

其他提示

只是使用 printk/syslog.

它是旧的,但是超级骗子容易。

当然,这将是垃圾!

该代码应该已经作

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

编辑:哎呀,不要低估;)

@弗兰克

实际上,这让我记录的调试打印文件。我在寻找什么东西会让我打印一些东西,每当一个变量的变化,而不我明确地在寻找的变量。

怎么样 有条件的断点?你可以尝试各种条件喜欢的第一个元件价值是零或非零,等等??

这是假设我可以很容易地连接一个调试器。整个的一点是,我只有一个图书馆,但可执行联系起来,它在不是容易获得。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top