调试之前
若要在GDB中调试程序在编译时需要加上调试信息
在GCC中添加的方法
GCC -g a.c -o a.exe
或下面提供更符合GDB的调试信息
GCC -ggdb a.c -o a.exe
运行流程
命令 |
作用 |
-start |
开始执行程序,在main函数第一句处停止 |
-continue、-c |
从当前位置继续执行 |
-run、-r |
执行程序到下一个断点或程序结束 |
-next、-n |
执行下一句,不会进入其他函数 |
-step、-s |
执行下一步,会进入其他函数 |
-set args <参数> |
指定运行的参数 |
-show arge |
查看已经设置的参数 |
-path <路径> |
设定程序运行的路径 |
-show path |
查看设定好的路径 |
变量、栈的操作
命令 |
作用 |
-info <变量名> 、-i <变量名> |
查看局部变量值 |
-info locals、-i locals |
查看所有局部变量的值 |
-set var <变量名>=<值> |
修改当前变量的值 |
-print <表达式>、-p <表达式> |
查看表达式的值 |
-display <变量名> |
跟踪一个变量,每次停止都显示这个变量 |
-x /<整数> <变量名> |
查看从变量名所指内存单元开始的整数个字节的内容 |
-backtrace、bt |
查看函数及其参数 |
-frame <栈层次(整数)> 、-f <栈层次> |
切换到指定栈,然后可以查看其他位置的变量,像全局变量、另一个局部变量 |
断点相关操作
命令 |
作用 |
-break <行数、函数名>、-b <行数、函数名> |
在某行或某函数设置断点 |
-break <行数、函数名> if <表达式> |
在某行或某函数设置当表达式成立时的断点 |
-info breakpoints |
查看所有断点和它们的断点号 |
-delete breakpoints <断点号> |
删除断点 |
-disable breakpoints <断点号> |
禁用断点 |
-enable breakpoints <断点号> |
启用断点 |
-watch <变量名> |
当变量改变时中断 |
-info watchpoints、i watchpoints |
查看所有watch的变量 |