您的位置:首页 > 运维架构 > Linux

Linux 下 C 语言编程 GDB 调试

2012-09-23 12:53 281 查看
视频: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
的参数,只需要

(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函数设置断点

()内为简写

run(r)运行程序

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

step(s)单步运行,进入子函数

continue(c) 继续运行

quit 退出gdb

list(l):查看程序

断点的设置:

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

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

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

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

5.delete break 参数 取消断点

6.info break查看所打断点

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

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

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

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

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息