GDB为什么查看不了源码?说No symbol “xxx” in current context?
可能有以下原因:
- 原因一:可能GCC版本跟GDB版本相差太大,以至于GCC产生的DWARF4格式的debug文件,GDB无法解析.
- 解决方法:
查看GCC和GDB版本号:
- gcc --version
- gdb --version
- 兼容版本号:GCC = 4.8.x, GDB = 7.6.x,可以让GDB查看到GCC生成的相应的dwarf格式的文件。
-
原因二:GCC编译的时候并没有加上"-g"或者"-g3"参数,所以并没有把源码编译进可执行程序里。
- 解决方法:在编译去时候加上-g或者-g3(g3参数比g参数,能查看更多的信息)
-
原因三:make clean的时候,并没有真正把object文件和executable可执行文件全部删除,还是使用原来的可执行程序,所以要确保真的删除了原来的可执行程序,并生成新的可执行程序。
一些小提示:
- 如果打断点的时候,会给出具体的文件信息,那么源代码是被编译进可执行程序的,是可以在运行时查看的。
例如:
(gdb) b main
Breakpoint 1 at 0x4510d3: file ./src/main.cpp, line 118.
- 以上例子,在main函数入口处打一个Breakpoint,可以看到断点所在的具体文件且所在行,说明源码已经被编译进可执行程序了。