我正在C++中實現一個平衡樹,但是賦值的要求是我必須使用模板類。我以爲先用int整理然後轉換成模板,但我們給出的測試代碼默認使用模板。使用GDB進入模板類
當我用g ++ class.h編譯我的代碼時,test.cxx -Wall -g -O0似乎一切正常,直到我進入gdb,它不會進入模板實現。我的模板實現文件包含在頭文件的末尾,gdb允許我在其中設置斷點,但它實際上並沒有進入函數。我一直使用gdb通過emacs,但它不直接在gdb中工作。我希望當GDB得到一個在那裏實現的函數時,切換到模板文件,但是它告訴我,它認爲它應該去的那一行並不真正存在。下面是一個典型會話:
(gdb) break set.template:7
Breakpoint 3 at 0x400c46: file set.template, line 7.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/students/jeffris/csci2270/btree/debug
Breakpoint 1, main() at debug.cxx:9
(gdb) step
Breakpoint 3, set (this=0x7fffffffe550) at set.template:7
Line number 7 out of range; set.template has 1 lines.
(gdb)
set()
Line number 8 out of range; set.template has 1 lines.
(gdb)
Line number 9 out of range; set.template has 1 lines.
(gdb)
Line number 10 out of range; set.template has 1 lines.
(gdb)
main() at debug.cxx:10
(gdb)
main_savitch_11::set<int>::empty (this=0x7fffffffe550) at set.template:70
Line number 70 out of range; set.template has 1 lines.
(gdb)
empty
Line number 71 out of range; set.template has 1 lines.
(gdb)
Line number 72 out of range; set.template has 1 lines.
(gdb)
我見過遇到類似問題,其他人的網絡周圍的幾個職位,但線程都離開了人世,但未得到解決。我已經嘗試了幾種編譯代碼的方法,包括將各個代碼鏈接在一起,但沒有骰子。我班的其他人都有同樣的問題,但已經滿足於使用cout語句來調試哪一種調試方式非常慢,因爲有10個函數互相調用。有沒有其他人經歷過這個並找到了解決方案?
你使用的是哪個版本的GDB?什麼版本的GCC?這兩個方案最近在這些方面取得了進展。 (GCC 4.6,GDB 7.3) –
難道你不能僅僅在頭文件中定義類,而不是包含輔助實現文件?如果你的老師不接受這個,那就去做吧,並且只要調試代碼 – jalf
並且斷點行應該在C++文件中,就把代碼移回到實現文件中。所以你應該使用'b set.cc:10' –