gdb调试命令的使用
来源:互联网 发布:java窗口按钮大小 编辑:程序博客网 时间:2024/05/18 03:42
1、 gdb是一款功能强大的程序调试工具,它不仅能够启动被调试的代码,还能够让被调试的程序在指定位置停住等等。
2.、gdb调试常用命令
run
运行程序(如果有断点,会停在断点处)
list
查看代码(10行)
break 20
设置断点在20行
next
单步执行,但不会进入子函数
step
单步执行,能够进入子函数
continue
执行到下一个断点处
start
开始执行程序,停在main函数第一行语句前面等待命令
finish
执行到该函数运行结束
info break
查看断点位置
delete 断点编号
删除断点
print i
打印i的值
break 20 if i=10
当i=20时,设置断点
break + 函数名
在调用该函数的时候停住
quit
退出gdb
set var
修改变量的值
backtrace
查看各级函数调用和参数
3、gdb调试程序的源代码
#include <stdio.h>int add_sum(int sum){ int tmp = 15; return tmp + sum;}int main(){ int i; int sum = 0; for(i = 1; i <= 100; i++) { sum += i; } printf("sum = %d\n", sum); i = add_sum(sum); printf("add sum = %d\n", i); return 0;}
4、gdb调试
[root@localhost 0709]# gcc -g demo.c -o demo[root@localhost 0709]# lsdemo demo.c
要使用gdb调试要在编译时加上-g,才能够使用。
进入gdb调试:
[root@localhost 0709]# gdb demoGNU gdb Red Hat Linux (6.5-25.el5rh)Copyright (C) 2006 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
a. 运行程序
(gdb) runStarting program: /home/07/0709/demo sum = 5050add sum = 5065Program exited normally.
使用(gdb) run 运行程序,如果程序设置了断点,那么将会在断点处停住。
b. 查看代码
(gdb) list 13 int tmp = 15;1415 return tmp + sum;16 }1718 int main()19 {20 int i;2122 int sum = 0;(gdb) 2324 for(i = 1; i <= 100; i++)25 {26 sum += i;27 }2829 printf("sum = %d\n", sum);3031 i = add_sum(sum);32 printf("add sum = %d\n", i);(gdb) 3334 return 0;35 }(gdb) Line number 36 out of range; demo.c has 35 lines.
使用(gdb) list 查看代码,每十行打印一次,知道打印完。如果要一次性打印完代码,如下
(gdb) list 13,3513 int tmp = 15;1415 return tmp + sum;16 }1718 int main()19 {20 int i;2122 int sum = 0;2324 for(i = 1; i <= 100; i++)25 {26 sum += i;27 }2829 printf("sum = %d\n", sum);3031 i = add_sum(sum);32 printf("add sum = %d\n", i);3334 return 0;35 }
c. 设置断点
(gdb) break 26Breakpoint 1 at 0x80483ba: file demo.c, line 26.
使用(gdb) break 26设置断点在26行。
d. 单步执行
(gdb) runStarting program: /home/07/0709/demo Breakpoint 1, main () at demo.c:2626 sum += i;(gdb) next24 for(i = 1; i <= 100; i++)(gdb) nextBreakpoint 1, main () at demo.c:2626 sum += i;
要先执行(gdb) run,才能执行(gdb) next。单步执行,不会进入调用函数。
(gdb) runThe program being debugged has been started already.Start it from the beginning? (y or n) yStarting program: /home/07/0709/demo Breakpoint 1, main () at demo.c:2626 sum += i;(gdb) step24 for(i = 1; i <= 100; i++)
要先执行(gdb) run,才能执行(gdb) next。单步执行,会进入调用函数。
e. 单次执行
(gdb) continue Continuing.Breakpoint 1, main () at demo.c:2626 sum += i;(gdb) continue Continuing.Breakpoint 1, main () at demo.c:2626 sum += i;
单次执行,执行到下一次断点的位置。
f. 查看断点
(gdb) info breakNum Type Disp Enb Address What1 breakpoint keep y 0x080483ba in main at demo.c:26 breakpoint already hit 2 times
g. 打印变量的值
(gdb) print i$1 = 2
打印变量 i 的值。
h. 删除断点
(gdb) delete 1(gdb) info breakNo breakpoints or watchpoints.
删除断点时,删除的是断点的编号。
i. 测试变量的值设置断点
(gdb) break 26 if i=5Breakpoint 2 at 0x80483ba: file demo.c, line 26.(gdb) info breakNum Type Disp Enb Address What2 breakpoint keep y 0x080483ba in main at demo.c:26 stop only if i = 5
当变量 i 的值为5的时候,设置断点。
j. 退出gdb
(gdb) quitThe program is running. Exit anyway? (y or n) yYou have mail in /var/spool/mail/root
我们知道gdb是一款功能十分强大的程序调试器。当执行(gdb) run 之后,程序停在哪一行,那一行就存在段错误。
- gdb调试命令的使用
- gdb调试命令使用
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- gdb调试命令的使用及总结
- GDB调试的基本命令使用。
- gdb的调试命令
- gdb的调试使用
- gdb 常用的调试命令
- 常用的gdb调试命令
- 经典的GDB调试命令
- 实用的GDB调试命令
- 常用的gdb调试命令
- eclipse+jdk开发环境的搭建
- UTF-16汉字编码表
- Linux下安装JDK
- 动态规划优化
- FPGA基础知识17(Matlab中滤波器的定点化 浮点运算转换为定点运算)
- gdb调试命令的使用
- web.config与Global.asax
- 莫比乌斯函数的证明
- Shared libraries with GCC on Linux
- 利用Fiddler抓取移动端某直播App在线用户头像信息
- iOS中代码支持多国语言切换的实现(Xcode5+iOS7)
- C#中的反射原理及应用
- IOS-文字色彩UIColor
- failed to find target with hash string 'android-17'(其他常见错误)