博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux GDB
阅读量:6114 次
发布时间:2019-06-21

本文共 2034 字,大约阅读时间需要 6 分钟。

hot3.png

一般来说,GDB 主要帮忙你完成下面四个方面的功能:

1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3、当程序被停住时,可以检查此时你的程序中所发生的事。

4、动态的改变你程序的执行环境。

使用GDB

一般来说 GDB 主要调试的是 C/C++的程序。要调试 C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:

> cc -g hello.c -o hello

> g++ -g hello.cpp -o hello

如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

启动GDB的方法有一下几种:

1、gdb <program>

program 也就是你的执行文件,一般在当前目录下。

2、gdb <program> core

用 gdb 同时调试一个运行程序和 core 文件, core 是程序非法执行后 core dump 后产生的文件。

3、gdb <program> <PID>

如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID。gdb 会自动 attach 上去,并调试他。

GDB有一个命令make:

make <make-args>

可以在gdb中执行make命令来重新build自己的程序。

在GDB中运行程序

当以 gdb <program>方式启动 gdb 后,gdb 会在 PATH 路径和当前目录中搜索<program>的源文件。如要确认 gdb 是否读到源文件,可使用 l 或 list 命令,看看 gdb 是否能列出源代码。

在 gdb 中,运行程序使用 r 或是 run 命令。程序的运行,你有可能需要设置下面四方面的事。

1、程序运行参数。

set args 可指定运行时参数。(如:set args 10 20 30 40 50)

show args 命令可以查看设置好的运行参数。

2、运行环境。

path <dir> 可设定程序的运行路径。

show paths 查看程序的运行路径。

set environment varname [=value] 设置环境变量。如:set env USER=hchen

show environment [varname] 查看环境变量。

3、工作目录。

cd <dir> 相当于 shell 的 cd 命令。

pwd 显示当前的所在目录。

4、程序的输入输出。

info terminal 显示你程序用到的终端的模式。

使用重定向控制程序输出。如:run > outfile

调试已运行的程序

一、设置断点(BreakPoint)

我们用 break 命令来设置断点。正面有几点设置断点的方法:

break <function>

在进入指定函数时停住。C++中可以使用 class::function 或 function(type,type)格式来指定函

数名。

break <linenum>

在指定行号停住。

break +offset

break -offset

在当前行号的前面或后面的 offset 行停住。offiset 为自然数。

break filename:linenum

在源文件 filename 的 linenum 行处停住。

break filename:function

在源文件 filename 的 function 函数的入口处停住。

break *address

在程序运行的内存地址处停住。

break

break 命令没有参数时,表示在下一条指令处停住。

break ... if <condition>

...可以是上述的参数,condition 表示条件,在条件成立时停住。比如在循环境体中,可以设

置 break if i=100,表示

当 i 为 100 时停住程序。

查看断点时,可使用 info 命令,如下所示:(注:n 表示断点号)

info breakpoints [n]

info break [n]

二、设置观察点(WatchPoint)

观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马

上停住程序。我们有下面的

几种方法来设置观察点:

watch <expr>

为表达式(变量)expr 设置一个观察点。一量表达式值有变化时,马上停住程序。

rwatch <expr>

当表达式(变量)expr 被读时,停住程序。

awatch <expr>

当表达式(变量)的值被读或被写时,停住程序。

info watchpoints

列出当前所设置了的所有观察点。

转载于:https://my.oschina.net/yulongjiang/blog/187275

你可能感兴趣的文章
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
移动端架构的几点思考
查看>>
Tomcat与Spring中的事件机制详解
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>