簡體   English   中英

是否可以在System C(或Plain Vanilla 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:其實,這是問題的一個錯字,但不是在我的代碼...謝謝!

您可以嘗試啟動另一個旋轉的線程,以查找變量中的更改:


#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM