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

2012.3.1 linux学习笔记 GDB调试方法

2012-03-01 20:36 716 查看
GDB调试工具 在编译时增加了-g进行编译的过程中,事实上是在目标文件中增加了C语言源文件的路径和行号,因此在调试中,需要保证源文件在编译时的路径下。

GDB命令

file 装入调试文件

kill 终止调试程序

list 显示源代码

info 显示相关信息

next 执行下一行,不进入函数step over

step 执行下一行,进入函数,相当于step in

run 执行当前调试的程序,可以加参数

quit 退出GDB

watch 设置观察点,为表达式expr设置一个观察点。一旦表达式有变化,马上停住

rwatch expr被读时,停住

awatch expr被读或写时,停住

catch 当event发生时,停住

break 设置断点

clear 清除所有的已定义的断点

delete 删除断点

disable 禁止所有断点

enable 使断点可以使用

return 强制函数返回

call 强制调用

make 重新生成程序

Shell 不退出GDB的情况下,执行Shell命令

where 查看当前程序运行的位置

backtrace 查看当前的栈信息

print 查看变量

print argv[0]@argc 查看从argv[0]开始看argc个变量

whatis 查看变量类型

ptype 查看结构体变量

gdb_test.c

#include<stdio.h>

#include<unistd.h>

#define MAX 16

struct student_t{

char name[MAX];

int age;

};

struct student_t students[]=

{

{"Zhang Wei",16},

{"Li Nan",17},

{"Liu Ying",15}

};

int test(int argc,char * argv[MAX])

{

int i;

for(i=0;i<argc;i++)

{

printf("argv[%d]:%s\n",i,argv[i]);

}

for(i=0;i<sizeof(students)/sizeof(struct student_t);i++)

{

printf("[%d] name:%s age:%d\n",

i,students[i].name,students[i].age);

}

return 0;

}

int main(int argc ,char *argv[])

{

test(argc,argv);

return 0;

}

高级命令

break 23 if i == 2 当循环执行到i == 2时,停住

使用set命令设置变量

set variable i = 4

print i

程序直接按照i = 4执行,跳过了之前几个循环。

attach 命令的使用

用来调试一个正在运行的进程

attach pid

where查看程序运行的位置

远程GDB调试

gdbserver 127.0.0.1:6789 sum

gdb sum

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