提问人:Nathan Fellman 提问时间:9/11/2008 最后编辑:Nathan Fellman 更新时间:10/1/2008 访问量:1164
我可以在系统 C 的运行时(或普通 C++ 中)设置数据断点吗?
Can I set a data breakpoint in runtime in System C (or in Plain Vanilla C++)?
问:
我在 system-C 中有一个类,其中包含一些数据成员,如下所示:
long double x[8];
我在构造中像这样初始化它:
for (i = 0; i < 8; ++i) {
x[i] = 0;
}
但是我第一次在代码中使用它时,那里有垃圾。
由于系统的构建方式,我无法轻松连接调试器。是否有任何方法可以在代码中设置数据断点,以便它告诉我变量在代码中的实际更改位置,但不挂钩调试器?
编辑: @Prakash: 实际上,这是问题中的错别字,但不是我的代码中的错别字......谢谢!
答:
0赞
prakash
9/11/2008
#1
当然,这将是垃圾!
代码应为
for (i = 0; i < 8; ++i) {
x[i] = 0;
}
编辑:哎呀,对不起,低估了;)
0赞
Frank Krueger
9/11/2008
#2
只需使用 printk/syslog。
这是老式的,但超级容易。
0赞
Nathan Fellman
9/11/2008
#3
@Frank
实际上,这让我可以将调试打印记录到文件中。我正在寻找的东西可以让我在变量发生变化时打印一些东西,而无需我明确寻找变量。
0赞
prakash
9/11/2008
#4
条件断点怎么样?您可以尝试各种条件,例如第一个元素值为零或非零等??
0赞
Nathan Fellman
9/11/2008
#5
这是假设我可以轻松连接调试器。关键是我只有一个库,但链接它的可执行文件并不容易获得。
0赞
Adam Rosenfield
10/1/2008
#6
您可以尝试启动第二个旋转的线程,以查找变量中的变化:
#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 信号。
上一个:在 .so 库中使用 C++ 类
下一个:快速磁盘克隆 [已关闭]
评论