Linux 调试c/c++程序小结

一:起因

(1)也许我们非常熟悉Windows下的VC6.0 和 CodeBlocks的调试工具 —— 界面化的调试,但是你是否想过你的每一个按键或者快捷键的背后指令是什么,让我们一起走进Linux的gcc动态调试工具GDB

(2)程序调试无非就是:debug(gcc -g -o target source);设置断点(b n);观察变脸(info locals);观察特定值(print expr);执行(start);执行下一行(next);进入子函数(step);执行到当前函数结尾(finish);查看源代码(list)等等操作

(3)gcc 的过程:C程序的编辑 用到vim;  程序的编译和运行用到gcc;  程序的调试用到gdb (kdbg是可视化的调试工具)

二:实例讲解

(1)调试步骤分为两步

   1)编译时一定到 加上 -g 产生调试信息,让调试信息包含在可执行文件中exe —— 命令行下:

        gcc -g -o target source

   2)把可执行文件exe加载到调试环境中:

      gdb target

   3) gdb为调试命令提示符,即可键入调试命令

(2)调试常用命令

   1)基本调试命令(重要)

        list 行号:列出产品从第几行开始的源代码
list 函数名:列出某个函数的源代码
start:开始执行程序,停在main函数第一行语句前面等待命令
next(n):执行下一列语句
step(s):执行下一行语句,如果有函数调用则进入到函数中
breaktrace(或bt):查看各级函数调用及参数
frame(f) 帧编号:选择栈帧
info(i) locals:查看当前栈帧局部变量的值
finish:执行到当前函数返回,然后挺下来等待命令

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
set var:修改变量的值
quit:退出gdb

   2)高级调试命令

      break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点
break...if...:设置条件断点
continue(或c):从当前位置开始连续而非单步执行程序

delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
run(或r):从开始连续而非单步执行程序
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪

  3)格式化输入查看变量 print(p)

输出格式:
一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。
例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要
做到这样,你可以使用GDB的数据显示格式: 
x 按十六进制格式显示变量。 
d 按十进制格式显示变量。 
u 按十六进制格式显示无符号整型。 
o 按八进制格式显示变量。 
t 按二进制格式显示变量。 
a 按十六进制格式显示变量。 
c 按字符格式显示变量。 
f 按浮点数格式显示变量。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。