Chinaunix首页 | 论坛 | 博客
  • 博客访问: 202738
  • 博文数量: 96
  • 博客积分: 1781
  • 博客等级: 上尉
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-07 12:31
文章分类

全部博文(96)

文章存档

2014年(1)

2013年(14)

2012年(44)

2011年(37)

分类: LINUX

2013-08-16 12:07:29

       在linux编写C语言调试时,以前遇到问题时,特别是内存溢出等问题,都是通过手动添加调试信息来逐步锁定出问题的语句。这样做虽然简单,但比较麻烦。在一些负责程序或者不是自己写的程序时会难以定位,所以还算需要借助调试工具来定位。
     1)gdb
        编译时加上-g标志即可。
        运行时 gdb -g app 即可进入gdb调试模式
        一般指令就是1)list   2)break n 3) run 4)next 5)where  6)bt
        一般流程是r 运行 比如到内存溢出时,会停止 此时输入where 可以看到此时运行到了什么指令,bt可以查看此时的堆?.list可以查看此时附件的代码.这样基本可以较快的找到问题.
    2)使用core文件
      使用core文件,是为了在程序异常退出时,可以保留那是的信息。
      需要系统生存core文件需要做如下设置  1)查看/proc/sys/kernel/core_pattern 这是设置生成core文件的路径和命名格式
                                                                                  core_uses_pid 这是设置是否包含pid
                                                           临时设置:sysctl -w kernel.core_used_pid=1
                                                                       sysctl -w kernel.core_pattern=/tmp/core-%e-%p 设置为带名字和pid
                                                         永久设置:vim /etc/sysctl.conf
                                                                      kernel.core_used_pid=1
                                                                       kernel.core_pattern=/tmp/core-%e-%p
                                                                      设置后无须重启立即生效 sysctl -p /etc/sysctl.conf
   然后查看当前用户:ulimit -c 查看那core的大小设置 如果为0 需要设置ulimit -c unlimited  如果需要永久设置需要在profile。
   这样程序编译时加入-g。然后运行程序 当程序异常退出时会在/tmp下面生成对应的core文件。
    将core文件和执行文件放在一起 gdp hello core-hello-11
    这时可以看到core里面的详细信息,可以定位到hello里面什么地方出现问题.


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