Re: Debug
※ 引述《tellux (寒川凝步)》之銘言:
: 我現在弄的程式
: 跑一跑會出現問題
: 用gdb查
: 結果是
: Program received signal SIGSEGV, Segmentation fault.
: CPaqpRegion::partition (this=0x8534390, isH=false, reg1=@0x8554fb8, reg2=@0x85
: 55004)
: at stl_vector.h:462
: 462 stl_vector.h: No such file or directory.
: in stl_vector.h
: 在eda4 (gcc3.4.1)上make,在eda6上面run...
: 有沒有人知道這是怎麼回事呢
本來想回.......那就debug吧 :D
但是看樣子你應該不大會用gdb!
我用gdb的幾大步驟
(1) load coredump file
(2) "bt"
(3) "f OOXX", OOXX是由bt看到的數字
(4) "l"
(5) "p A.B A->B....."
bt--backtrack,看看calling stack的樣子, main() call func1(), 再func1又call func2()....
那bt會看到 [0]main, [1]func1, [2]func2......
以你的例子來說, 最後一個應該會在stl當中.
f --frame,切換gdb所"看"到的環境, 切到calling的那一瞬間的環境,
這樣可以在整個calling stack當中鑽來鑽去 XD
l --list, 當然後列出source code, 是出事的那行的前後幾行.
當然可以指定某檔的某行(EX:列出main.c的23行,main.c:23)
不知道出事的行號? bt一下就又看到了.
p--print, 印出這個frame環境可以看到的變數的值!
其他指令的話,可以喊救命......"help"
但是help只會列出大概的類型, 如下
(gdb) help
List of classes of commands:
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
[...砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍...]
Type "help" followed by a class name for a list of commands in that class.
Type "help" followed by command name for full documentation.
Command name abbreviations are allowed if unambiguous.
你想知道breakpoints的東西時, 就喊help breakpoints!
(gdb) help breakpoints
Making program stop at certain points.
List of commands:
awatch -- Set a watchpoint for an expression
break -- Set breakpoint at specified line or function
catch -- Set catchpoints to catch events
clear -- Clear breakpoint at specified line or function
commands -- Set commands to be executed when a breakpoint is hit
[...砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍砍...]
Type "help" followed by command name for full documentation.
Command name abbreviations are allowed if unambiguous.
對breakpoints中的clear有疑問, 就喊clear
(gdb) help clear
Clear breakpoint at specified line or function.
Argument may be line number, function name, or "*" and an address.
If line number is specified, all breakpoints in that line are cleared.
If function is specified, breakpoints at beginning of function are cleared.
If an address is specified, breakpoints at that address are cleared.
With no argument, clears all breakpoints in the line that the selected frame
is executing in.
See also the "delete" command which clears breakpo
覺得我的"快快樂樂學不會gdb"無聊的話, 想離開就按q........
(gdb) q
--
gdb的使用方法,
1) 東東有買一本gdb的書給Lab.
2) 我的桌上(書架)有一本很多年前的中文書, 當中一個chapter是gdb.
要借書,沒問題. 只要讓我知道書流落何方.
因為這本書也是我某不知名的學長的"贈"書.....Orz
3) 網路上的電子書: http://www.gnu.org/software/gdb/documentation/
4) 不錯的資料 http://www.study-area.org/cyril/opentools/opentools/book1.html
這份講了一些UNIX上programming常用的工具的基本用法
5) ......給各位補充吧 XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.230.125
忘了補充, 有一種情況是我用gdb也查不來(應該是我功力太差 Orz )
就是stack overflow!
calling stack太小, 在程式的執行過程中, 被灌爆了 XD
gdb會看到啥風景? 我忘了 Orz 只記得一切正常的樣子,沒問題的樣子,
但那程式又coredump :O 當時"彰化"都念的幾百遍 :P 還是找不到,
我是在running time, 下breakpoint, 看很久......zzzZZZZzzzz........
到"bt"可以看到1XXX個frames時, 才猜出這是stack overflow的問題!
推
11/07 19:51, , 1F
11/07 19:51, 1F
→
11/07 19:54, , 2F
11/07 19:54, 2F
推
11/07 22:43, , 3F
11/07 22:43, 3F
推
11/07 22:46, , 4F
11/07 22:46, 4F
※ 編輯: gwliao 來自: 140.112.230.125 (11/07 23:32)
討論串 (同標題文章)