您的位置:首页 > 其它

gdb之初识

2015-08-16 21:24 330 查看
1. gdb是什么
以前在windows下开发的时候一直都使用的windows的编辑器(VS), 调试则使用的IDE自带的调试手段,
F9: 设置断点
F5: 执行直到遇到断点
F10: 单步执行
F11: 单步且遇到函数则进入函数
shift+F5: 跳出调试模式
只记录基础的,如果以后再去windows上开发则做补充。
gdb是Linux调试的工具,灰常强大。 关于gdb这个版块不是一次直接写完,先把用的部分写出来一点,以后用到就补充。

2. gdb基础使用
# vi one.c
#include <stdio.h>

void fun1(int ac)
{
printf("in fun1, the ac is %d\n", ac);
}

void fun2(const char *str)
{
printf("in fun2, the str is %s\n", str);
}

int main(int argc, char *argv[])
{
printf("hello gdb\n");

fun1(argc);
int i = 1;
for (; i<argc; i++)
{
fun2(argv[i]);
}
return 0;
}

# gcc -g -Wall -Werror one.c -o one // 必须要加 -g 选项, 否则不会加载符号表之类的,调试不方便
# gdb one
(gdb) l 10 // list, 列出程序 : 列出后面10行
6 }

7

8 void fun2(const char *str)

9 {

10 printf("in fun2, the str is %s\n", str);

11 }

12

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

14 {

15 printf("hello gdb\n");
# (gdb) b main // b 设置断点 :在main函数设置断点,b后面可以接函数名; 等于命令b 15, 可以接行数
Breakpoint 1 at 0x40055e: file one.c, line 15.
# (gdb) info b // info 显示信息 :显示所有的断点
Num Type Disp Enb Address What

1 breakpoint keep y 0x000000000040055e in main at one.c:15
# (gdb) r // r 开始执行 : 程序开始执行,直到遇到断点或者执行完成

Starting program: /root/gdb/one

Breakpoint 1, main (argc=1, argv=0x7fffffffe688) at one.c:15

15 printf("hello gdb\n");
# (gdb) n // n 下一步 : 执行该行命令,并显示下一行
hello gdb
17 fun1(argc);
# (gdb) <CR> // 换行 执行上一次的命令 : 再执行一次n
in fun1, the ac is 1

18 int i = 1;

# (gdb) c // 一直执行直到遇到断点
Program exited normally.
并没有进入到fun2,因为没有传递参数,那再来一遍且带参数
# gdb one
# (gdb) b 21 // 直接将断点打到 fun2那里
# (gdb) r 1 2 3 4 // 运行并带参数(1 2 3 4)
Breakpoint 1, main (argc=5, argv=0x7fffffffe668) at one.c:21

21 fun2(argv[i]);
# (gdb) s // 单步执行 : 与n不同的是它会进入函数
fun2 (str=0x7fffffffe8d5 "1") at one.c:10

10 printf("in fun2, the str is %s\n", str);

多个文件中有相同的函数 function_test()

(gdb) b function_test // 所有函数都打断点

(gdb) b a.c:function_test // a.c中的函数断点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: