Re: Debug

看板NTUGIEE_EDA作者 (gwliao)時間19年前 (2005/11/07 01:35), 編輯推噓3(301)
留言4則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《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
不曉得有沒有裝ddd? 不熟gdb的可以用ddd比較方便
11/07 19:51, 1F

11/07 19:54, , 2F

11/07 22:43, , 3F
我不會用DDD, 所以只能講gdb的東西!
11/07 22:43, 3F

11/07 22:46, , 4F
用gdb去debug幾次, 就會發現....gdb簡單的很! XD
11/07 22:46, 4F
※ 編輯: gwliao 來自: 140.112.230.125 (11/07 23:32)
文章代碼(AID): #13RZxfXb (NTUGIEE_EDA)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
4
19年前, 11/07
完整討論串 (本文為第 2 之 4 篇):
1
4
19年前, 11/07
3
4
8
18
文章代碼(AID): #13RZxfXb (NTUGIEE_EDA)