我在 system-C 中有一个类,其中包含一些数据成员:
long double x[8];
我在这样的构造中初始化它:
for (i = 0; i < 8; ++i) {
x[i] = 0;
}
但是我第一次在我的代码中使用它时,那里有垃圾。
由于系统的构建方式,我无法轻松连接调试器。是否有任何方法可以在代码中设置数据断点,以便它告诉我变量在代码中实际更改的位置,但无需连接调试器?
编辑:@Prakash:实际上,这是问题中的错字,但在我的代码中没有……谢谢!
当然,这将是垃圾!
代码应该是
for (i = 0; i < 8; ++i) {
x[i] = 0;
}
编辑:哎呀,对不起低估了;)
只需使用printk/syslog。
这是老式的,但超级简单。
@坦率
实际上,这让我可以将调试打印记录到文件中。我正在寻找的东西可以让我在变量发生变化时打印一些东西,而无需我明确地寻找变量。
条件断点怎么样?您可以尝试各种条件,例如第一个元素值为零或非零等?
这是假设我可以轻松连接调试器。重点是我只有一个库,但链接它的可执行文件并不容易获得。
您可以尝试启动第二个旋转的线程,寻找变量的变化:
#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 信号。