linux开发之gdb记录
简述
GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing at the moment it crashed.
GDB, GNU项目调试器,允许你看到在另一个程序执行时“内部”发生了什么——或者另一个程序在崩溃时正在做什么。

使用
准备工作
要想使用gdb进行源码级别的调试,需要用gcc编译(不是链接)时候加上-g选项。这样调试生成的程序才能够显示源码,否则只能进行汇编级别的调试。
通常进行编译时候不止加入-g,还会关闭编译器优化-O。另外,-Wall可以在编译时候发现一些问题,避免一些不必要的bug。
开始
首先通过gdb 程序名来启动gdb去调试该程序。
| 命令 | 说明 | 示例 | 
|---|---|---|
| 基本 | ||
| q/quit | 退出 | |
| help | 帮助,可具体指定哪个命令 | help info | 
| set args 参数... | 给程序设置参数 | set args 1 2 | 
| show args | 显示当前 | |
| start | 程序运行并停在第一行 | |
| r/run | 程序运行并到断点才停止 | |
| c/continue | 继续运行直到下一个断点 | |
| n/next | 执行一条一句(不会进入函数体) | |
| s/step | 执行一条一句(进入函数体) | |
| until | 继续运行至退出循环或遇到下一个断点 | |
| finish | 继续运行至跳出函数体或遇到下一个断点 | |
| 查看代码相关 | ||
| l/list | 显示当前文件代码 | |
| l 行号 | 显示指定行号前后文 | list 10 | 
| l 函数名 | 显示指定函数 | list main | 
| l 文件名:行号 | 显示指定文件代码 | list ot.cpp:1 | 
| l 文件名:函数名 | 显示指定文件代码 | list ot.cpp:fun | 
| show list/listsize | 显示list时候的行数 | |
| set list/listsize 行数 | 设置list时候显示的行数 | set list 20 | 
| 断点 | ||
| b/break 行号 | 在当前文件指定行打断点 | b 10 | 
| b 函数名 | 在当前文件指定函数打断点 | b fun | 
| b 文件名:行号 | 在指定文件指定行打断点 | b ot.cpp:10 | 
| b 文件名:函数名 | 在指定文件指定函数打断点 | b ot.cpp:fun | 
| b 位置 if 条件 | 设置条件断点(一般用于循环位置) | b 23 if i==2 | 
| i/info b | 查看断点信息 | |
| d/del/delete 断点编号 | 删除指定断点 | d 2 | 
| dis/disable 断点编号 | 使指定断点无效 | dis 2 | 
| ena/enable 断点编号 | 使指定断点生效 | ena 2 | 
| 变量 | ||
| p/print 变量名 | 打印变量值 | p var | 
| ptype 变量名 | 打印变量类型 | ptype var | 
| set var 变量名=值 | 设置变量值 | set var i=6 | 
| display 变量名 | 每次暂停自动打印变量的值 | display var | 
| i/info display | 查看自动打印变量列表 | |
| undisplay 编号 | 取消自动打印 | undisplay 2 | 
    不忘初心方得始终

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号