zoukankan      html  css  js  c++  java
  • GDB使用总结

    http://witmax.cn/gdb-usage.html

     

    首先GDB可以自动化调试,但是我不会

     

    首先编译的时候要加上 -g选项

     

    分屏使用GDB:  gdb  -tui

     

     

     

    GDB中加载程序 :                        file  文件名

     

    设置参数:                                  set args 参数

     

    设置观察点(当有变化就停下):               watch 表达式/变量名

     

    清除停止点:                                clear  行号/函数名

     

    加断点:    b  行号/函数名

     

    输出内存:  x  addr

     

    单步调试: s(不进入函数) / n(进入函数)

     

    打印堆栈:                                  bt

     

    显示源码:                             l  行号/函数名

     

    修改默认的listsize:                          set listsize count

     

    输出变量或者数组:                          变量名/*数组名@长度

     

    自动显示变量: display 变量名

     

    查看寄存器: i  r

     

    改变程序运行:

     

     

    GDB调试多线程

    默认调试多个线程。多个线程同时执行,

    使用“info threads”查看当前的线程数和线程的线程号。

    使用“thread 线程号”可以切换线程。

    使用单步调试的话走的是当前线程,但是也可以在其他线程的函数里设置断点。

    因为进行多线程调试的时候使用s或者c或者所有线程是同步执行的,如果只想让当前进程被执行可以使用“set scheduler-locking off|on|step on只有当前被调试程序会执行,step是在单步的时候,除了next过一个函数外,只有当前线程会执行,off是所有线程都执行。

    GDB调试多进程

    默认调试的是主进程,但是其他的进程会在后台执行,不被调试的进程会后台执行。

    可以通过“set follow-fork-mode [parent|child]   set detach-on-fork [on|off]”来让GDB同时调试多个进程。其中参数如下:

    parent                   on               只调试主进程(GDB默认)
    child                     on               只调试子进程
    parent                   off              同时调试两个进程,gdb跟主进程,子进程block在fork位置
    child                     off             同时调试两个进程,gdb跟子进程,主进程block在fork位置

     

    查询正在运行的进程:info inferiors

    切换调试的进程:    inferior <infer number>

    GDB调试core dump

    使用GDB确定程序挂在哪里,我们只需要四步:

    Ulimit -c unlimited //设置可以生成转储文件

    Gcc -g 文件名 -o 程序名; //生成转储文件

    Gdb 程序名 转储文件名; //定位





  • 相关阅读:
    【上线复盘】20190329-一个刷新数据的接口是如何导致几十万的订单数据错误
    VS------csc.exe已停止工作解决方法
    SQLServer------存储过程的使用
    SQLServer------聚集索引和非聚集索引的区别
    SQLServer------Sql Server性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON
    SQLServer------如何快速插入几万条测试数据
    SQLServer------如何让标识列重新开始计算
    SQLServer------begin tran/commit tran事务的使用方法
    SQLServer------插入数据时出现IDENTITY_INSERT错误
    Spring----Spring Boot Rest的使用方法
  • 原文地址:https://www.cnblogs.com/dchipnau/p/5255388.html
Copyright © 2011-2022 走看看