首页 > 编程知识 正文

gdb单步调试命令,linux

时间:2023-05-06 21:33:33 阅读:109613 作者:467

本节中的目录Linux调试器-gdb使用gdb使用后台gdb调试命令使用gdb调试coredump文件的Linux项目自动化工具make/Makefile后台实例

Linux调试器-gdb有两种使用gdb并使用后台程序的分发方法。 在LinuxOS操作系统下调试程序时,调试和发行模式必须在编译时将程序编译为调试版本。 debag :对于程序的调试版本,添加了有助于程序员调试代码的调试信息。 release :这是程序的发布版本,客户通常都有这个版本。 此版本与调试版本相比,编译器在编译时进行了优化,程序运行速度更快。 从Linux gcc/g中导出的二进制文件缺省为版本。 要使用gcc/g调试,在源代码生成二进制文件时,必须进入-g选项gdb调试使用指令gdb[可执行文件]:gdb调试模式才能生成调试版本。 l/list :显示源代码。 l [显示行号binFile源代码,然后从上次位置开始向下各显示10行。 l [函数名称] :列出某个函数的源代码。 r或run :运行程序。 或next :单一执行(每个进程执行)。 s或step :进入函数调用(逐语句执行)。 b(break ) [源文件中的行号] :在下一行设置断点。 break [函数名称] :在某个函数的开头设置断点。 Ib(infobreak ) :显示断点信息。 c(continue ) :从当前位置开始连续执行,而不是单步执行程序。 (继续执行,遇到下一个断点时停止执行。 r(run ) :不是逐步执行程序,而是从一开始就连续执行。 delete [断点编号] :删除断点。 禁用[断点编号] :禁用断点。 启用[断点编号] :启用断点。 p(print ) :可以打印表达式的值,根据表达式变更变量值或调用函数。 p [变量] :打印变量的值。 不仅可以打印普通变量,还可以打印指针变量。 此外,还可以打印对象。 set var :更改变量的值。 display [变量名] :跟踪并查看变量,在每次决定时显示其值。 undisplay :取消对以前设定的变量的跟踪。 q ) q(quit ) :退出gdb。 gdb调试核心转储文件

前提本质上是调试器崩溃后的内存镜像文件。 内存镜像文件保存内存中程序崩溃时的值。

生成coredump文件的条件:

1 .在1. linux操作系统上,必须设置core size的大小--------(ulimit-c )。

2 .磁盘大小。 调试命令:查看gdb [可执行文件] [coredump文件]bt :调用堆栈

f [堆栈编号] :跳转到特定堆栈tips :

11信号:取消空指针引用,取消野生指针引用,越界访问内存。 (programterminatedwithsignal 3358 www.Sina.com /,Segmentation fault.)

信号6 ) double free Linux项目自动化工具make/Makefile的背景中是否写了makefile。 从一个项目的源文件不计算一个人是否有能力完成一个大项目,而是按类型、功能、模块放在几个目录中,从一个侧面说明了makefile是一系列

规则指定哪些文件需要先编译,哪些文件需要稍后编译,哪些文件需要重新编译,以及哪些文件需要更复杂

的功能操作makefile带来的好处是——“自动编译”,只要写一次,只需一个make命令,整个项目就可以完全自动编辑

翻译,大幅提高了软件开发的效率。 make是一个命令工具,用于描述makefile中的命令,大多数IDE通常都有此命令

命令,例如Delphi的make、Visual C的nmake、Linux下GNU的make。 你会发现makefile变成了一个

工程方面的编译方法。 make是命令,makefile是一个文件,将两者结合起来完成项目的自动生成。 实例代码c代码

#include stdio.h int main () printf('Hellomakefile! n '; 返回0; } makefile

hello 3360 hello.OGC chello.o-ohellohello.o : hello.sgcc-chello.s-o hello.o hello.s 3360 hello.IGCC-shello go -fHello.IHello.sHello.oHello依赖关系文件Hello,Hello依赖于hello.ihello.i,它依赖于hello.c依赖方法gcc hello. * -option hello. *

原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

make会在当前目录下找名字叫“Makefile”或“makefile”的文件。如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“hello”这个文件,
并把这个文件作为最终的目标文件。如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件新(可
以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果
找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)当然,你的C文件和H文件是存在的,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明
make的终极任务,也就是执行文件hello了。这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文
件。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,
而对于所定义的命令的错误,或是编译不成功,make根本不理。make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,
我就不工作啦。 预定义变量

&^:依赖的所有对象 $@:目标对象

makefile清理 工程是需要被清理的像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,
不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编
译。但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被
执行的。可以将我们的 hello 目标文件声明成伪目标,测试一下。 make当中也可以自定义变量

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。