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

...

文章分类
文章存档

2024年(1)

2021年(2)

2020年(2)

2016年(9)

2015年(34)

2011年(14)

2010年(7)

分类: LINUX

2024-07-02 16:22:24

1. core调试
查看core路径
$ cat /proc/sys/kernel/core_?
$ /sbin/sysctl kernel_core_pattern
设置ulimit
$ ulimit -c ulimited    或者在 .bash_profile 中永久修改
设置调试的源代码路径(调用dir,在进入gdb调试模式后,设置源代码的路径)
$gdb -q test
>dir [相对路径]
备注: dir只能设置相对路径,设置绝对路径时并没有任何意义

调试core程序
通过bt,或者where查看栈信息
$ gdb 可执行程序名  core文件
>bt 
>where


2. linux段错误调试
     
使用objdump
$ objdump -DC1 ./program  >  file
$ dmesg                                                       //找到{BANNED}{BANNED}{BANNED}最佳佳佳近发生段错误的输出信息
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文件相当大时 该方法不可用

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

待续……

阅读(80) | 评论(0) | 转发(0) |
0

上一篇:shell笔记【一】【awk】

下一篇:没有了

给主人留下些什么吧!~~