C/C++ 之 gdb 调试
2015-12-13 14:25
375 查看
1.gcc编译器
gcc -c test1.c test2.c -o test-c 选项将每一个源文件编译成对应的目标文件。如果不设置此项,则目标文件中将只有一个.o文件。
-l 用于指定包含头文件的目录。
-g 该选项可生成能被gdb调试所使用的调试信息。
-o 生成二进制可执行程序
2.gdb调试器
编写代码test.c#include<stdio.h> int main() { int i; long result = 0; for(i = 0;i<100;i++) result += i; }
对程序进行编译并生成调试信息
[root@localhost LearnLinux]# gcc -g test.c -o test使用gdb开始调试
[root@localhost LearnLinux]# gdb test GNU gdb (GDB) Red Hat Enterprise Linux (7.2-50.el6) Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/frank/LearnLinux/test...done. (gdb)
使用l或者list可以查看源码,
list 10 可以查看10行周围源码
list 2,6 查看2到6行源码
使用r或者run可以运行,run后面可以接程序运行需要的参数
例如run 2 “data.txt”
使用b或者break命令设置断点,例如
break 12 在12行断点
break function_my 在函数function_my前打断点
break 12 if i==9 当i值为9时,在第12行打断点
可以使用
(gdb) info locals
i = 5
result = 15
查看局部变量的值
delete breakpoint 1 删除1号断点
enable breakpoint 1 使1号断点有效
disable breakpoint 1 使1号断点无效
clear 清除程序上次停止处的断点
clear 20 删除20行设置的所有断点
用p或者print查看变量值
(gdb) print result
$1 = 136
如果要看全局变量,可以使用文件或者函数加上::的方式,
例如 print 'fun2.c'::x
print 'fun2.c'::sum::x
对程序函数进行调用
print func(12)
print a-b 查看表达式的值
查看连续内存空间的值
print *array@len 查看array指针,长度为len的值
如果是静态数组,可以直接 print + 数组名
p/x i 按照十六进制显示变量i。同理的有 d十进制,u十六进制无符号,o八进制,t二进制,c字符格式,f浮点格式
使用display ,在用户单步跟踪时可以显示变量
例如 display/x i
可以使用set改变变量的值
(gdb) set result=2
跳转执行jump
jump 21 跳转到21行
使用backtrace 打印栈
可以使用shell运行shell命令
shell vim 1.txt
相关文章推荐
- c++ 模板类实现 动态顺序表 基础操作
- C/C++ 之 库
- C/C++ 之 restrict关键字
- c语言总结
- 一起talk C栗子吧(第七十五回:C语言实例--DIY ls命令)
- c++ 构造函数初始化列表
- C++ Windows读写INI文件
- C语言 makefile文件与头文件的写法。
- c++编译 extra qualification '类名' on member '变量名' error
- 博弈总结
- [c++ 温故知新]类内char* 指针内存分配长度
- 【ThinkingInC++】2、输入和输出流
- 编C语言单元测试框架CUnit方法库
- C++的string二三事
- 实战c++中的string系列--string与char*、const char *的转换(data() or c_str())
- 实战c++中的string系列--string与char*、const char *的转换(data() or c_str())
- C++ Map容器实例
- c++函数
- c++中设计可以统计自身对象的类(1)
- VS提示C++某些头文件或函数已经过期无法使用