zoukankan      html  css  js  c++  java
  • gdb调试技巧

    Gdb调试技巧

    1, 添加调试信息

    g++  -g  test.cpp  –o  test

    2, 常用命令

    显示图形化代码 Ctrl+x+a

    启动程序 r (run)

    断点 b (breakpoint)

    清除/禁用/启用断点 delete/disable/enable

    单步 s (step 碰到函数会进入)

    单行 n (next 碰到函数不会进行, 而是整条执行)

    执行到下一个断点 c (continue)

    查看变量 p (print)

      显示完整的长字符串:set print element 0

    显示变量 display

    查看当前调用堆栈 bt (backtrace)

    查看某一层调用代码 f (frame)

    3, 调试core dump

    程序执行时,经常会因为段错误segment fault而退出,操作系统会把此程序当前内存信息dump到磁盘上,即生成core文件,对core进行分析可以很快分析出导致程序crash的地方

     

     

     

     

     

     

     

     

     

     

     

     

     

    3.1,设置core文件大小

    系统默认不会生成core文件,需要进一步设置。core文件的生成依赖于shell的设置,在shell中运行命令:ulimit –a,可以查看系统的默认设置。使用命令ulimit –c unlimited 可以设置core file size 为无限。

     

    永久设置coredump的方法:

    sudo vim /etc/security/limits.conf

    文件最后增加如下两行

    @username soft core unlimited

    @username hard core unlimited

    永久设置coredump文件路径及其文件名称的方法

    sudo vim /etc/sysctl.conf

    文件最后增加如下两行

    kernel.core_pattern = /opt/tercel/core_log/core_%e_%t_%p

    kernel.core_uses_pid = 0

    使用命令sudo sysctl –p使得修改生效

     

    3.2,生成core文件

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    3.3,调试简单core文件

    使用gdb ./test core来调试core,发现gdb直接就定位到了出错的语句。

     

     

     

     

     

     

     

     

     

     

     

    3.4,使用breaktrace 和frame命令

     

     

    4, 利用gdb调试找出nginx崩溃的方法

    1, 使用命令:ulimit –a检查core file设置的是否正确,见前面说明;

    2, 将nginx源码目录文件auto/cc/conf中的一行“ngx_compile_opt=“-c””更改为“ngx_compile_opt=”-c -g””

    3, 在nginx源码目录下执行sudo ./configure命令

    4, 编译nginx源码,将objs目录下的nginx文件复制到nginx运行目录,此步切记不要make install,否则会覆盖nginx.conf

    5, 重启nginx,等待core.*****文件生成

    6, gdb加载coredump文件:gdb –core=core.****

    7, gdb>where 就很容易找到nginx segfault的原因了

    5, gdb加载nginx运行中的work进程

    1, ps –ef|grep nginx查看当前nginx运行进程;

    2, sudo gdb进入gdb调试环境;

    3, attach pid(进程id);

    4, break ****命令设置断点;

    5, c命令运行到断点位置开始单步调试

  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/snowbook/p/8183757.html
Copyright © 2011-2022 走看看