GDB为什么查看不了源码?

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,可以看到断点所在的具体文件且所在行,说明源码已经被编译进可执行程序了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值