也许,我误解了一些东西,但我不能让Gdb读取调试库。 我从命令行做的是:
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有关。
答案 0 :(得分:2)
set stop-on-solib-events 1
使用该设置,GDB应在加载任何共享库之前停止。
执行此操作时:
file problem_exec
b main
r
... where is GDB stopped?
info shared
如果GDB在main
处停止,则应加载共享库。但如果它在动态加载器中停止(正如我预期的那样),那么它们