您的位置 首页 新品

初学GDB调试东西需求留意的事项

初学GDB调试工具需要注意的事项-GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。相比于VS里面的图形化调试工具,其功能更加强大。

从Windows转到Linux下已经有一段时刻了,每次刷算法题碰到问题需求调试的时分,就分分钟想关机,切换到Windows上调试。所以,花了一点时刻来查找一下Linux下常见的调试东西,这不搜不知道,一搜吓一跳,竟然差点错过了这么好的调试利器GDB。上手非常简略,几分钟就能够开开心心调试你的代码了。

GDB概述

GDB是一个由GNU开源安排发布的、UNIX/LINUX操作系统下的、根据指令行的、功用强壮的程序调试东西。比较于VS里边的图形化调试东西,其功用愈加强壮。

GDB装置

在终端下运转如下代码即可装置GDB调试器:

sudo apt-get install gdb

检查装置是否成功,输入gdb -version,会输出如下代码:

GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10Copyright (C) 2015 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later //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.

GDB调试过程

调试用例

写了一个简略完成两个数相加的程序,来演示gdb调试的相关过程:

#include int add(int a , int b){ return a+b;}int main(){ int m,n; scanf(“%d%d”,&m,&n); int sum = add(m , n); return 0;}

编译生成

一般在编译程序的时分都是直接生成release可履行文件,

gcc -o add add.c

假如需求调试的话,应该编译成debug版别,此刻,只用在编译选项中参加 -g,如下:

gcc -g add.c -o add

进入调试状况

进入gdb调试状况有两种,第一种直接在gdb指令后边加上编译好的文件名:

gdb add

另一种方法便是输入gdb,然后经过运用file指令来翻开待调试的文件:

gdbfile add

终端界面会显现如下信息:

GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10Copyright (C) 2015 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later //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://www.gnu.org/software/gdb/bugs/>.Find the GDB manual and other documentation resources online at://www.gnu.org/software/gdb/documentation/>.For help, type “help”.Type “apropos word” to search for commands related to “word”…Reading symbols from add…done.(gdb)

常用调试指令

常用指令简写指令用法说明fileffile filename在gdb中载入某可履行文件listllist [开端,结束]列出文件的代码清单,支撑指定行号printpp 变量名容许出变量的值breakbbreak 行号or函数名在指定行号或函数上设置断点clearclclear 行号or函数名删去指定行号或函数上的断点conTInuecconTInue [开端,结束]从断点处持续运转nextnnext运转到下一行stepsstep单步调试runrrun履行程序

实践调试

列出代码清单

(gdb) l1 #include 2 3 int add(int a , int b){4 return a+b;5 }6 int main(){7 int m,n;8 scanf(“%d%d”,&m,&n);9 int sum = add(m , n);10 return 0;

加断点

在main函数和程序的第4行加两个断点。

(gdb) break mainBreakpoint 1 at 0x4005e2: file add.c, line 6.(gdb) break 4Breakpoint 2 at 0x4005d0: file add.c, line 4.

运转

(gdb) runStarting program: /home/Documents/add Breakpoint 1, main () at add.c:66 int main(){ //这儿显现运转到的方位,停在了第一个断点方位main

next下一行

(gdb) n8 scanf(“%d%d”,&m,&n); //下一行(gdb) n //下一行需求输入两个数字5 49 int sum = add(m , n); //履行到add函数方位

step单步

(gdb) sBreakpoint 2, add (a=5, b=4) at add.c:4 //单步调试刚好抵达第二个断点的方位4 return a+b;

打印变量的值

(gdb) p a // 打印a的值$1 = 5(gdb) p b //打印b的值$2 = 4

铲除断点

清楚指定行的断点,不加表明铲除一切的断点

(gdb) break 9 Breakpoint 5 at 0x40060b: file add.c, line 9. //加一个断点(gdb) cl 9Deleted breakpoint 5 //测验铲除

从断点处持续运转

(gdb) cContinuing.[Inferior 1 (process 8168) exited normally] //程序正常退出,调试结束

高档指令

gdb还有许多高档用法,如检查仓库列表,切割窗口等,这儿就不逐个测验了。

查询运转信息

where/bt:检查当时运转的仓库列表

up/down:改动仓库显现的深度

set args:参数:指定运转时的参数

show args:检查设置好的参数

info program: 来检查程序的是否在运转,进程号,被暂停的原因。

切割窗口

layout:用于切割窗口,能够一边检查代码,一边测验

layout src:显现源代码窗口

layout asm:显现反汇编窗口

layout regs:显现源代码/反汇编和CPU寄存器窗口

layout split:显现源代码和反汇编窗口

Ctrl + L:改写窗口

跋文

学习gdb调试只需求几分钟就能上手,可是用途超级大!!收获颇丰啊!这便是所谓的低投入高回报,还在等什么,赶忙举动吧。

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/99775.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部