2017-07-24 39 views
0

我正在調試一個C/C++程序,我想根據多個變量設置一個具有條件的斷點。在非本機類型上具有多個條件的GDB斷點

休息Foo.cpp中:60如果(巴== 3 & & == 5 I)

這似乎並沒有工作,因爲它停止每當它擊中Foo.cpp中:60而不是每當兩個條件匹配時(它甚至不符合其中一個條件)。有沒有一種簡單的方法來實現我想要實現的目標?

編輯:bar和我不是原生C類型,它們是強類型的。

休息Foo.cpp中:60如果((A)條== 3 & &(B)我== 5)

+0

查看GDB文檔。以下是_ [quickStartGuide](http://teaching.csse.uwa.edu.au/units/CITS2230/resources/gdb-intro.html#breakpoints)_的位置。 – ryyker

+0

「它們是強類型的」 - 這告訴我們*沒有*。如果您需要幫助,您需要提供https://stackoverflow.com/help/mcve。 –

+0

當它錯誤地停在第60行時,'p bar','p(A)bar','p i'和'p(B)i'顯示什麼? –

回答

1

解決您的條件語句及其結果放入自己的布爾變量,然後設置您的斷點語句來評估單個變量。這使得表格與GDB中顯示的例子保持一致。文檔:

如:

BOOL x = FALSE; 

x = ((bar == 3) && (i == 5)); 

(gdb) break foo.cpp:60 if x 
+0

不幸的是,它仍然不起作用,gdb在當前上下文中返回錯誤「無符號」運算符==「。我應該提到那個吧,我不是原生的c類型(它們被定義爲強類型)。我應該做什麼樣的表演?即if((bar ==(A)3)&&(i ==(B)5)? – ginginsha

+0

@ginginsha - 提供更多關於這些變量是如何創建/輸入的信息。它。 – ryyker

0

這對我的作品。

(gdb) b dump_route_info if (strncmp(route->rt_key.prefix, "192.168.0.2", 15) == 0) && route->rt_key.mask == 32