服务端入门《六》(gdb 调试例子)
来源:互联网 发布:哪个搜索软件好 编辑:程序博客网 时间:2024/04/20 13:17
<1>单步调试
1. step(或s) : 执行下一行语句,如果有函数调用则进入到函数中。
2. next(或n) : 执行下一行语句,不进行函数。
3. finish :跳出调试的函数
<2> 多文件调试断点标记方法
#include <stdio.h>void swap(int *a, int *b);int main( void ){int i = 3;int j = 5;printf("i: %d, j: %d\n", i, j);swap(&i, &j);printf("i: %d, j: %d\n", i, j);return 0;}
void swap(int *a, int *b){int c = *a;*a = *b;*b = c;}
那我想。怎么让我调试到swap函数呢?
有几种方法:
1.直接用在gdb中强行指定
b swapper.c:swap
//或者以下
b swapper.c:1
2.利用step命令,相当于xcode 里的step into 命令。首先在main 函数执行到swap时打上断点也就是
b main.c:10
(注意,有时候b swapper.c:swap, 会不起作用,那么就需要在gcc的时候添加-g,如下:
今天在Linux上用GDB进行程序调试的时候,发现提示:No symbol table is loaded. Use the "file" command.
导致这个错误的原因一般是:在交叉编译时没有加-g选项.
所以在编译程序时一定要注意加上-g这个选项,尤其在写Makefile文件时,
一定不要偷懒,仔细检查,确认每个编译条件都添加了-g选项。
参考:http://blog.csdn.net/whyrun/article/details/7471592)
<3> 断点基本管理
增
b 1
b main.c:4
b main.c:main
b main.c:4
b main.c:main
删
delete 1//删除Num为1的断点。哪来的Num?? 输入 i b 在gdb中的断点列表的第一列!delete 1 2 5//可以同时删除多个断点delete//如果没有参数 则删除所有断点clear//消除gdb当前行的断点.clear main//注意没有delete main这样的命令 clear main的意思是,清除函数main内所有的断点。clear main.c:main//同上clear 2clear main.c:2
改
改的话主要用到地方是将普通断点改为条件断点,这在第3章会有具体介绍.
1: 2: cond 3 i >3//将Num为3的断点加上i>3的条件,满足此条件时.停在此断点
查
1: 2: info break
<4>断点的逻辑判断
例子:
#include <stdio.h> int main(void){int i;for (i = 0; i < 10; ++i)printf("hello world!");return 0;}
需求1.请在i=5的时候停下来.
需求2.请在i=5后,停下来之后.直接跳到return 0;
1 : (gdb)list main //这里例出当前正在调试谁的的具体信息 2: 1 #include <stdio.h> 3: 2 4: 3 int main( void ) 5: 4 { 6: 5 int i; 7: 6 8: 7 for( i = 0; i < 10; ++i ) 9: 8 printf("hello world!"); 10: 9 11: 10 return 0; 12: (gdb) b 8 if i==5 //这里就是所谓的条件断点.当i==5时,在第8行中断 13: Breakpoint 1 at 0x100000eed: file until-anomaly.c, line 8. 14: (gdb) r //运行调试程序 15: Starting program: /Users/cubase01/Desktop/Debugging/Chapter_02/until-anomaly/anomaly 16: Reading symbols for shared libraries +........................ done 17: 18: Breakpoint 1, main () at until-anomaly.c:8 19: 8 printf("hello world!"); 20: (gdb) p i //程序已中断,打印i值 i=5 21: $1 = 5 22: (gdb) u 10 //u 是until的缩写,它的意思是 执行到某一行.contine 类似 break 某行->continue的缩写 23: main () at until-anomaly.c:10 24: 10 return 0; 25: (gdb)
参考:
GDB 命令行调试之路(全 1-9) :http://www.cnblogs.com/syncg/archive/2012/12/26/2834503.html
0 0
- 服务端入门《六》(gdb 调试例子)
- 服务端入门《五》(gdb 调试)
- gdb调试(六)
- GDB调试学习(六)
- GDB 调试(六)
- 用gdb调试游戏服务端
- 用gdb调试游戏服务端
- GDB调试例子1
- GDB调试简单例子
- gdb调试例子
- GDB调试入门备忘
- GDB调试入门
- gdb 调试入门
- GDB调试入门
- GDB调试入门篇
- GDB调试程序入门
- gdb调试入门
- GDB调试工具入门
- mysql数据库 优化技巧
- Leetcode Roman to Integer
- 常用有用的快捷键
- 45、JavaScript的运动----链式运动----回调函数fn参数的添加
- 剑指offer|数字在排序数组中出现的次数
- 服务端入门《六》(gdb 调试例子)
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
- FP-growth算法流程
- Leetcode Palindrome Pairs
- 一个炫酷的对话框依赖库
- 推挽结构详解
- Java多线程 之 ThreadPoolExecutor(九)
- Android stadio 自定义debug release keystore
- volley网络请求保持sessionID