Linux 下 C 语言编程 GDB 调试

时间:2021-03-02 02:26:11

视频:http://v.youku.com/v_show/id_XMTIyMDczNzY4.html

 

cmake and gdb

转载:http://blog.csdn.net/wfing/archive/2010/06/09/5659086.aspx

1.  cmake支持gdb的实现,
首先在CMakeLists.txt下加入
SET(CMAKE_BUILD_TYPE "Debug")
在下面加入:
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
原因是CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release RelWithDebInfo >和 MinSizeRel。
当这个变量值为 Debug 的时候,CMake 会使用变量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串作为编译选项生成 Makefile;


2.  在GDB中间加入程序启动参数
比如我们需要调试一个可执行文件./a.out help
这时
$gdb ./a.out
进入到gdb的命令行模式下,然后:
(gdb) set args help
就能加上可执行文件需要的参数,如果要看argc[1]到argc[N]的参数,只需要
(gdb) show args

3. gdb中查看字符串,地址的操作,数据类型
比始有一个int型的变量i,相要知道他的相关信息,可以
(gdb) print i
打印出变量i的当前值
(gdb)x &i
与上面的命令等价。

如果有x命令看时,需要看一片内存区域,(如果某个地方的值为0,用x时会自动截断了)
(gdb) x/16bx address
单字节16进制打印address地址处的长度为16的空间的内存,16表示空间长度,不是16进制,x表示16进制,b表示byte单字节

gdb看变量是哪个数据类型
(gdb) whatis i
即可知道i是什么类型的变量

 

gcc -g test.c -o test 产生test调试文件

gdb test/file test 启动调试程序

break main :main函数设置断点

()内为简写

runr运行程序

next (n) 单步运行,不进入子函数

steps)单步运行,进入子函数

continue(c) 继续运行

quit 退出gdb

listl:查看程序

断点的设置:

1.break(b) 函数名 :在函数入口打断点

2.break 行号 把断点打在相应行

3.break 文件名:行号 多文件设置断点

4.break 行号 if条件当条件为真时 在该行打断点b5if i=20 i20在第5行打断点

5.delete break 参数 取消断点

6.info break查看所打断点

7.delete(d) 断点编号 删除对应编号的断点

8.print(p) 变量 查看变量值

9.finish 运行程序知道当前函数结束,跳出子函数

10.watch 变量名 监控变量的值