[英]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:其實,這是問題的一個錯字,但不是在我的代碼...謝謝!
您可以嘗試啟動另一個旋轉的線程,以查找變量中的更改:
#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信號。
當然,這將是垃圾!
該代碼應該是
for (i = 0; i < 8; ++i) {
x[i] = 0;
}
編輯:糟糕,為您低估;)
只需使用printk / syslog即可 。
它是老式的,但超級傻瓜容易。
@坦率
實際上,這使我可以將調試打印記錄到文件中。 我正在尋找的是可以讓我在變量更改時立即打印出某些內容的東西,而無需我明確尋找該變量。
有條件斷點怎么樣? 您可以嘗試各種條件,例如第一個元素的值為零或非零,等等?
假設我可以輕松連接調試器。 整個問題是我只有一個庫,但是鏈接到它的可執行文件並不容易獲得。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.