程序调试

3 篇文章 0 订阅

1、查看时候是最新代码编译生成的可执行文件/库,查看是否有自己新加的代码

strings a.out | grep “my add code”  

2、查看库/可执行文件依赖了哪些库

ldd libxxx.a

3、查看编译后的可执行文件中的符号信息,如函数名编译后变成了什么

nm a.out

——binutil工具

4、gdb常用命令记录
这里写图片描述

附1:数据断点(DataBreakpoint)
全局变量的值不是我期望的,而我自己没有做赋值,那肯定就是被修改了,不管是什么原因,最终就是要确定它在什么地方被修改的。由于工程中使用的地方太多,没一处去加代码不现实,太耗费时间了,效率也比较低下。可以试试数据断点的工具。
理解数据断点,应该是对某一变量的地址所对应的空间进行监控,一旦该地址对应的空间被修改,就会立即产生中断,并将程序的运行指针指向修改的语句,由此确定问题所在。

附2:名字粉碎机制
实现代码位于functions_info—>>symtab_symbol_info—>>>search_symbols—>>re_exec (SYMBOL_NATURAL_NAME (*psym)),这里涉及到了C++(以及其他的例如java/objc之类的语言)的名字粉碎机制,他为了指出重载函数,所以将函数的名字进行了编译时粉碎,从而让一个名字看起来尽可能的全局唯一,对应的,gdb就需要完成这个逆向的反粉碎过程,将一个粉碎之后的变量名称再还原为原始的全局唯一,对应的,gdb就需要完成这个逆向的反粉碎过程,将一个粉碎之后的变量名称再还原为原始的源代码中定义的变量名,从而可以达到和程序猿的交互。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值