本文整理自邵发C/C++学习指南Linux篇视频、PPT及示例代码
在Linux使用gdb命令行进行单步调试
准备工作: 在compile这一步,添加选项 ‐g
gdb ./helloworld 进入gdb界面
r (run): 重头开始运行程序
n (next): 下一步 (等价于VS下的F10单步(函数调用时,直接跳过))
c (continue): 程序继续运行,直到下一处断点,
或者程序运行结束
q (quit): 退出程序界面
添加断点:
b main (加上函数名)
b main.cpp:12 (文件名+行号)
b 12 (当前文件的行号)
b Object::Create (类名 + 成员函数)
显示断点 info break
删除断点 del break 2 (后面的2是编号)
next 执行下一步
n 执行下一步
n 3 执行下面三步
p (print) 显示表达式的值
p a
p a+b
disp (display) 监视变量
x 显示内存的值
x/16xb buf
其中,
16: 显示16个单位
x: 以十六进制显示 (x十六进制 d十进制 u无符号整形 f小数 s字符串 ...)
b: 单位是1字节 (可选 b h w g )
byte1字节, half‐word2字节, word4字节, giant8字节
在Linux下,程序中如果进行了不正确的指针操作,
则程序崩溃、提示"Segment Fault" (core dumped)
如, 空指针访问,野指针访问,数组越界访问
bt (backtrace) 查看错误时刻的栈信息
内存转储
1. 在运行该程序的shell里运行命令
ulimit ‐c unlimited
(注:在shell关闭重启后,要重新运行一次)
2. 运行程序
程序发生段错误时,程序退出,同时当发生错误
时的信息转储(dump)到一个core.*文件。
3. 用gdb来查看发生段错误的代码位置
gdb helloworld core.***