我可以在System C(或者Plain Vanilla C ++)的运行时中设置数据断点吗?
时间:2020-03-05 18:51:23 来源:igfitidea点击:
我在System-C中有一个带有一些数据成员的类,例如:
long double x[8];
我正在像这样的构造中初始化它:
for (i = 0; i < 8; ++i) { x[i] = 0; }
但是,当我第一次在代码中使用它时,在那儿有垃圾。
由于系统的构建方式,我无法轻松连接调试器。是否有任何方法可以在代码中设置数据断点,以便告诉我变量在代码中的实际更改位置,而无需连接调试器?
编辑:
@普拉卡什:
实际上,这是问题的错字,但不是我的代码中的错字...谢谢!
解决方案
回答
当然,这将是垃圾!
该代码应该是
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信号。