Linux系统命令及shell脚本实践指南第七课

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45596274/article/details/101716327

调试器:gdb

三大特点:

1、      
启动被调试的程序

2、      
设置断点、单步执行

3、      
查看变量的值

调试步骤

gcc -g sum.c -O sum

gdb sum

操作:

quit退出gdb

list显示代码

查看源代码:

gdb+可执行文件±-tui

layout split(c语言和汇编语言同时看,每行代码对应汇编)

layout asm(显示汇编)

layout src(显示源码)

断点:

break+行号(打断点,再输入run执行到断点行)

break+行号+条件

break+函数名

info break(查看断点信息)

delete+断点编号(删除断点)

disable+断点编号(让断点关闭)

enable+断点编号(让断点打开)

clear+行号(清除这行的断点)

运行命令:

run:运行程序

next,step:单步执行(next不会进入子函数,step进入子函数)

continue:继续运行直到程序结束(再次遇到新的断点还会停止)

练习:

Finish

执行完当前的函数。

until

这个用于执行完循环。在执行完循环体内的最后一条语句之后执行 until, 就会执行完循环体到后面的一个语句停下。

如何调用函数

Watch

可设置观察点(watchpoint)。使用观察点可以使得当某表达式的值发生变化时,程序暂停执行。

执行该命令前,必须保证程序已经运行

Display

display命令查看参数的值,可以使用disable,enable,delete,info命令修改及查看其状态,用法与对断点的一样。

作业

如何使用dgb调试段错误

GDB段错误调试

所谓段错误就是对内存的非法访问

采用GDB调试段错误有2种方法

1.在GDB中运行目标程序,当发生段错误时,GDB中运行的程序会自动停下来

2.直接运行目标程序,使其在发生段错误时产生内存转储(core dump)文件,GDB对该文件进行调试

abort.c

#include <stdio.h>

#include <stdlib.h>

void recurse(void)

{

static int i;

if( ++i == 3)

abort();

else

recurse();

}

int main(int argc,char ** argv){

recurse();

}

gcc -g -o
abort abort.c

使用gdb调试

Line number 15 out of
range; abort.c has 14 lines.

(gdb) r

Starting program: /mnt/hgfs/www/c/gcc/abort

Program received signal SIGABRT, Aborted.

0x000000333a232495 in raise (sig=6) at …/nptl/sysdeps/unix/sysv/linux/raise.c:64

64     
return INLINE_SYSCALL
(tgkill, 3, pid, selftid, sig);

(gdb) bt

#0  0x000000333a232495 in raise (sig=6) at
…/nptl/sysdeps/unix/sysv/linux/raise.c:64

#1  0x000000333a233c75 in abort () at abort.c:92

#2  0x00000000004004e7 in recurse () at
abort.c:8

#3  0x00000000004004ec in recurse () at
abort.c:10

#4  0x00000000004004ec in recurse () at
abort.c:10

#5  0x0000000000400502 in main (argc=1, argv=0x7fffffffe528) at abort.c:13

显示在recurse函数调用了3次后调用了abort函数,产生段错误

内存错误工具

猜你喜欢

转载自blog.csdn.net/weixin_45596274/article/details/101716327
今日推荐