广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
SIEMENS江苏省镇江市 西门子代理商——西门子华东一级总代理

GDB简介

GDB(GNU Debugger)是Linux下一款C/C++程序调试工具,通过在命令行中执行相应的命令实现程序的调试,使用GDB时只需要在shell中输入gdb命令或gdb filename(filename为可执行程序文件名)即可进入GDB调试环境。

GDB主要有以下功能:

设置断点

单步调试

查看变量的值

动态改变程序的执行环境

分析崩溃程序产生的core文件

GDB常用命令

命令简写含义file-装入待调试的可执行文件runr执行程序(至结束)start-开始调试(至main开始处暂停)steps执行一条程序,若为函数则进入内部执行nextn执行一条程序,不进入函数内部continuec连续运行finish-运行到当前函数返回killk终止正在调试的程序listl列出源代码的一部分(10行)printp打印变量的值info localsi locals查看当前栈帧的局部变量backtracebt查看函数调用栈帧编号framef选择栈帧(再看局部变量)display-每次自动显示跟踪的变量的值undisplay-取消跟踪breakb设置(调试)断点delete breakpointsd breakpoints删除断点,不加行号则删除所有disable breakpoints-屏蔽断点enable breakpoints-启用断点info breakpointsi breakpoints显示所有断点break 9 if sum != 0-根据条件设置断点(sum不等于0时,第9行设断点)set varsum=0-修改变量的值(使sum变量的值为0)watch-监视一个变量的值examine <...>-查看内存中的地址jumpj跳转执行signal <...>-产生信号量return-强制函数返回call-强制调用函数make <...>-不退出gdb下重新产生可执行文件shell <...>-不退出gdb下执行shell命令quitq退出gdb环境

调试示例1

gdbtest.c:

#include <stdio.h>

int add(int start, int end)
{
int i, sum;
for(i=start; i<=end; i++)
sum += i;
return sum;
}

int main()
{
int result;
result = add(1, 10);
printf("result=%d\n", result);

return 0;
}

编译,需要添加-g参数,用于GDB调试:

$ gcc -o gdbtest gdbtest.c -g

该程序是计算1~10电脑的和,正确结果应该输出55,我们先运行一下程序:

$ ./gdbtest 55

程序在本电脑上运行正确,但是,该程序是存在问题的,add()函数中的sum变量应该赋初值0,否则在其它电脑上运行,如果该变量被初始化了随机数,则会计算出错误的结果。本次运行未出错的原因应该是该变量被默认初始化为0,所以计算无误。

下面使用GDB对该可执行程序进程调试:

$ gdb gdbtest

输出以下信息:

GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from gdbtest...done.
(gdb)

首先输出一些系统信息,最后一行开头的(gdb)为命令提示符,输入start命令开始调试:

gdb start Temporary breakpoint  at 0x67b: file gdbtest.c, line 14. Starting program: /home/deeplearning/dcj/linuxCTest/GDBtest/gdbtest Temporary breakpoint 1, main  at gdbtest.c:14             add1, 10 gdb

程序直接运行至主函数处的第一条实质性的运行语句处,即第14行的子程序调用处,此处可以使用step命令步入该语句的程序内部:

gdb step add 1, 10 at gdbtest.c:6            start i<end i++ gdb


展开全文
相关产品
拨打电话 微信咨询 发送询价