我正在調試一個程序,它有幾個文件:arr.h是列表類的頭文件,它創建一個鏈接列表(隨機生成)的數組。 Howard.cpp是實現文件,main.cpp是我把主函數調用到列表類的對象上的地方。它包含list.h.我正在爲我的一個函數(在Howard.cpp中實現)獲取seg錯誤。我進入了GDB。當seg故障發生時,我知道輸入「where」或「list」以獲得導致seg故障的功能調用。在這種情況下,當我遇到發生seg錯誤的函數(第0幀)時,我想查看變量以及它們在該函數中的值。但是,當我嘗試進入該特定功能時,或鍵入「信息當地人」時,我收到消息「沒有符號表信息可用」。我知道這不是事實,但我無法弄清楚如何能夠看到失敗的路線。此外,關於該功能/文件的任何行信息都不會顯示。我認爲它與在不是可執行文件的文件中的函數中的錯誤有關;但我能做些什麼呢?如果這個問題令人困惑,請隨時向我澄清。在這一切上我都很新。使用GDB中的多個鏈接文件進行調試
這是一個linux終端環境,由我的課教授創建,旨在練習鏈表和遞歸。
好了,我要在這裏包括一個例子:
我有一個函數,遞歸副本反向鏈接列表的數組。遞歸函數稱爲table :: reverse_table(node * &,node *,node *)。我已經調試到了我知道停車點沒有問題的地步。當程序段錯誤,我將輸入「其中,」它會輸出:
#0 0x0000000000400e6e in table::reverse_table(node*&, node*, node*)()
#1 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#2 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#3 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#4 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#5 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#6 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#7 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#8 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#9 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#10 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#11 0x0000000000400df1 in table::reverse_table(node*&, node*, node*)()
#12 0x0000000000400f87 in table::reverse_table(table&, int, int)()
#13 0x0000000000400fe7 in table::reverse_table(table&)()
#14 0x0000000000401087 in main()
然後,當我鍵入「幀0」,它顯示:
#0 0x0000000000400e6e in table::reverse_table(node*&, node*, node*)()
當我鍵入「信息當地人「,則顯示」沒有可用的符號表信息「。我無法獲得有關段錯誤發生的函數在哪裏的任何信息; GDB似乎沒有這些信息。在調試時需要做些什麼來包含它?
你可以添加一個SSCCE(http://sscce.org/) - 這會讓它更清晰。 –
添加了我在調試時看到的gdb消息。希望這是足夠的信息。我真的不想發佈我的代碼,因爲我不希望它出現,我只是想解決我的問題。我試圖弄清楚如何自己調試我的問題。 – hhoward