gdb调试宏、条件断点、命令行参数
例子:
#include <stdlib.h>
#include <stdio.h>
#define MACRO1(x) (++(x))
#define MACRO2(x) (MACRO1(x)+100)
#define MACRO3(x) (MACRO2(x)+200)
int main(void)
{
int a = 0;
int b = 0;
b = MACRO3(a);
printf("%d\n", b);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
1、调试宏
在GCC编译程序的时候,加上-ggdb3/-g3参数,这样,你就可以调试宏了。
macro expand/exp 展开宏定义
info macro 查看宏展开,及被调用处
(gdb) macro exp MACRO3(3) //展开宏,并传入值
expands to: (((++(3))+100)+200)
(gdb) info macro MACRO3 //查看这个宏在哪些文件里被引用了,以及宏定义是什么样的
Defined at /mnt/hgfs/VMUB/codeTs/test/macro_gdb.c:6
#define MACRO3(x) (MACRO2(x)+200)
- 1
- 2
- 3
- 4
- 5
2、条件断点
break line-or-function if expr
(gdb) break main if b = 0
Breakpoint 1 at 0x8048426: file macro_gdb.c, line 10.
- 1
- 2
3、命令行参数
可以使用两种方法输入命令行参数
1)run 命令行参数
2)set args 命令行参数
如:我的程序中需要输入的时服务器端ip地址,可以通过以下两种方法输入
1)如果直接运行程序,run www.baidu.com
2)set args www.baidu.com,后面再继续进行调试
4、修改变量的值
p a = 100 #修改变量的文件中的值
参考:这里写链接内容