gdb 中如何退出死循环

gdb 中如何退出死循环,第1张

首先,可以再开启另外一个终端,

然后输入ps -u -当前用户名,找到一直死循环的那个进程获取pid,

最后,kill -9 死循环进程pid号

在外部强制结束进程

gdb 查看 core 文件

基本上

core 文件就是一个包含了程序崩溃时这个进程的所有信息的文件。在那 “遥远的黄金年代”,程序员不得不把 core 文件以十六进制的方式显示

出来,然后满头大汗的阅读机器码的手册,但是现在事情就简单得多了。顺便说一下, 在 FreeBSD 和其他的 4.4BSD 系统下,core 文件都叫作

progname.core 而不是简单叫 core,这样可以很清楚的表示出这个 core

文件是属于哪个 程序。

1. 要检查一个 core 文件,首先用 gdb 可执行文件名

来调试产生core文件的可执行程序:

2. 命令 core会分析 可执行程序名.core

文件

注:如果当前不是 core 文件所在目录,首先要执行 dir

/可执行程序名.core的路径/。

(gdb)core 可执行程序名.core

举例:

$gdb a.out

GDB is free software and you are

welcome to distribute copies of it under certain conditionstype "show copying"

to see the conditions. There is absolutely no warranty for GDBtype "show

warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free

Software Foundation, Inc.

(gdb)core

a.out.core

Core was generated by `a.out'.

Program terminated with

signal 11, Segmentation fault.

Cannot access memory at address

0x7020796d.

#0 0x164a in bazz (anint=0x5) at temp.c:17

(gdb)

这种情况下,运行的程序叫 a.out,因此 core 文件 就叫

a.out.core。我们知道程序崩溃的原因就是函数 bazz 试图访问一块不属于它的内存。

有时候,能知道一个函数是怎么被调用的是非常有用处的。因为在一个复杂的程序里面问题可能会发生在函数调用栈上面很远的地方。

3.

命令 bt 会让 gdb

输出函数调用栈的回溯追踪

(gdb)bt

#0 0x164a in bazz (anint=0x5) at temp.c:17

#1 0xefbfd888 in end ()

#2 0x162c in main () at temp.c:11

(gdb)

函数 end() 在一个程序崩溃的时候将被调用;

在本例

中,函数 bazz()

是从 main()中被调用的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7912925.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存