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
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
相关文章推荐
- linux应用编程笔记(1)gdb调试方法及如何找出dbg.c程序中的错误
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法
- linux设备驱动学习笔记--内核调试方法之printk
- linux调试程序利器 GDB学习笔记
- linux环境gdb调试工具学习笔记
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
- linux应用编程笔记(1)gdb调试方法及如何找出dbg.c程序中的错误
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法
- 学习笔记 --- LINUX应用调试之使用GDB
- 学习笔记之vi之用vimgdb调试scanf
- “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境
- linux设备驱动学习笔记--内核调试方法之printk
- 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】
- linux学习之四---gdb调试
- Unix学习笔记-------目录遍历实例----Linux下判断是否是一个目录还是一个文件的方法
- Linux学习笔记----虚拟机CentOS访问网络的设置方法
- 【嵌入式Linux学习七步曲之第四篇 Linux内核移植】GDB和BDI2000调试PPC Linux内核
- 学习笔记之linux基本命令使用方法
- linux 学习- 编程基础之GDB 调试