2014-03-18 176 views
2

也許,我誤解了一些東西,但我不能讓GDB去讀取調試庫。 我在命令行做的是:gdb7.7不加載共享庫

gdb 
file problem_exec 
b main 
r 

GDB停在:

(gdb) r 
Starting program: /Users/.../problem_exec 

Breakpoint 1, main (argc=<error reading variable: Could not find the frame base for "main(int, char**)".>, argv=<error reading variable: Could not find the frame base for "main(int, char**)".>) 

沒有共享庫:

(gdb) info shared 
No shared libraries loaded at this time. 

最後一個命令給出:「沒有共享庫加載的

我的.gdbinit樣子:

# file .gdbinit 
set stop-on-solib-events 1 
# stop gdb from stepping over functions and output diagnostics 
set step-mode on 
set breakpoint pending on 
set env DYLD_LIBRARY_PATH path1:path2:path3 
#automatically load shared libraries (on/off): 
set auto-solib-add on 

我相信,一個可執行文件對共享庫的調試版本鏈接(總共有大約30個庫,但一個我很感興趣的是絕對編譯調試模式)。我檢查它otool -L problem_exec

如果我運行程序,它會直到我要調試的庫運行時錯誤,但我無法步調一致。
我缺少的東西?

p.s.我在os-x上運行Gdb的自編譯版本。

更新:它可能與此problem有關。

回答

2

set stop-on-solib-events 1

通過該設置,GDB應該停止加載任何共享庫之前

當你這樣做:

file problem_exec 
b main 
r 
    ... where is GDB stopped? 
info shared 

如果GDB停止在main,然後共享庫應該被加載。但如果它在動態加載程序中停止(正如我所期望的那樣),那麼它們應該是而不是加載還是

+0

我更新了這些問題,似乎它停在了main,但是沒有共享的libs被加載 – Denis