Chinaunix首页 | 论坛 | 博客
  • 博客访问: 372736
  • 博文数量: 75
  • 博客积分: 1486
  • 博客等级: 上尉
  • 技术积分: 675
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-22 18:38
个人简介

...

文章分类
文章存档

2023年(1)

2021年(3)

2020年(2)

2018年(1)

2017年(1)

2016年(10)

2015年(34)

2011年(14)

2010年(9)

分类: LINUX

2017-01-02 21:55:43

linux程序调试


使用objdump
$ objdump -DC1 ./program  >  file
$ dmesg                                                     找到最近发生段错误的输出信息
objdump -d ./program  >  ./filedump       此文件包含二进制文件的汇编代码

eg
filedump : test [33 20]:segfault at 80484e0 ip 0018506a
$ grep -n -A 10 -B 10 "80484e0"  filedump


试用场景:
1)  不需要 -g 参数编译 不需要core文件  需要能看懂汇编程序
2)  如果gcc使用了 -O1 -O2 -O3 那么生成的汇编指令被优化 相应的调试难度也会增加

使用catchsegv
待续。。。


使用gcc -g & gdb
gdb> bt
gdb> frame 3
gdb> print buf


使用core & gdb
core设置
$ echo "/tmp/%e_core_%p_%t"  >  /proc/sys/kernel/core_pattern        可以随时修改 但是重启后失效
永久修改
/sbin/sysctl -w kernel.core_pattern=/var/log/core_%e_%t

试用场景
1) 需要通过core文件调试
2) 程序很复杂时 core文件相当大时 该方法不可用


linux段错误调试
1) 借助dmesg
2) nm [可执行程序]        打印二进制文件中的符号表
3) ldd                查看二进制的共享链接库 包含库名称、起始地址等





阅读(1587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~