2011-02-14 126 views
0

我使用G ++ 4.1.2和GDB 7.2GDB無法設置斷點

我調試使用Xerces,這是我使用相同的工具內置的代碼,但想必無需調試。

GDB逐步通過我的代碼很好,但當然不通過Xerces,因爲它可能沒有調試信息,並且肯定不知道源目錄的位置。但我想要的是當Xerces(一個回調解析器)調用一個回調對象時設置一個斷點。

其基類的DefaultHandler

我有一個類ContentHandlerBase:公衆的DefaultHandler 然後葉類從ContentHandlerBase繼承。這些葉子類在命名空間A內部,例如

in gdb我嘗試設置一個斷點。

B A :: LeafContentHandler :: LeafContentHandler B A :: LeafContentHandler ::的endElement

第一斷點作品因爲代碼是內聯(在報頭中定義的)。

第二個斷點不起作用,這意味着gdb聲稱不存在這樣的符號,即使它明顯存在。這是一個在Xerces庫中定義的虛擬函數,如果這有所作爲。在我重新編譯Xerces之前,它是用g ++ 3.4.6編譯的,我在gdb中找不到符號。現在,gdb找到了符號(我可以打開製表符),但它說它不存在,我應該等待庫加載。

任何人都可以告訴我要做些什麼嗎?我不想用調試來構建所有的xerces。請注意,在某些情況下,使用.cpp文件中的構造函數,它也出於某種原因起作用,然後,因爲它位於同一個文件中,所以我可以在linenumber中設置一個後續斷點,並且工作正常。

+0

是這樣嗎?似乎gdb不適合宏。 – g24l 2015-11-24 11:39:55

回答

1

嘗試GDB 7.1 - 它似乎有在GDB通過函數名設置斷點一些問題,從宏觀擴張任何機會7.2

+0

我會給這個懷疑的好處,雖然我沒有嘗試... – Dov 2011-03-18 20:26:08