使用gdb查看exit和_exit调用

通篇假设未曾使用过gdb,一般的发行版都会携带这个工具,要是没有,只能自己找找,如何安装了。

本文并未详细说明exit(_exit)里边详细过程,只是表述如何进入。

测试代码如下:

#include <stdio.h>

#include <stdlib.h>

void func()

{

     printf("atexit ");

}

int main(int argc, char* argv[])

{

     atexit(func);

     printf("stdio ");

     printf("exit ");

     exit(0);

}

将其输入test.cc当中

编译 

>> g++ -g -o test test.cc

启动gdb调试

>> gdb test

显示下代码输入list或者首字母l

>> l

显示如图:

在第19行处打上断点,输入break或者b

>> break 19

运行

>> run

运行之后,运行到断点处暂停,等待输入新的命令(如果不是显示如图,可以查看本文最后部分)

有两个命令,一个是next,一个是step。next会跳到下一步,step会进入到这个函数中(相当于VS上的F10和F11)

>> s

输入s手就可以跟踪了,接下来可以按照需求选择next或者step。

有一个便利的地方是,当输入一个命令后,直接按回车键,默认输入上一个命令。

退出调试

>> quit


如果是第一次调试,往往都会缺一些环境:

解决方案:

切换成root用户,将use后的部分复制,即 debuginfo-install ...

然后在终端上粘贴运行,就如同yum install。

如果准备详细学习gdb,可以参考下边的博客,前面几章用于入门还是不错的,后面可以慢慢看,慢慢提高。

http://blog.csdn.net/haoel/article/details/2879

时间: 2025-01-21 10:08:34

使用gdb查看exit和_exit调用的相关文章

linux中exit()和_exit()函数的作用

exit和_exit函数都是用来终止进程的.当程序执行到exit或_exit时,系统无条件的停止剩下所有操作, 清除包括PCB在内的各种数据结构,并终止本进程的运行.但是,这两个函数是有区别的. exit()函数的作用是:直接使用进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据 结构:_exit()函数则在这一基础上做了一些包装.在执行退出之前加了若干道工序.exit()函数与_exit()函 数最大区别就在于exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区

[20150520]使用gdb查看等待事件.txt

[20150520]使用gdb查看等待事件.txt -- 昨天开始重看vage-- 使用gdb 看等待事件这部分内容跳过了,今天测试看看.如何操作. -- 实际上设置断点在gdb下,11g等待事件的起始函数是kslwtbctx函数.还是通过演示来说明: 1.测试环境: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------

GDB查看栈信息

当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用GDB命令来查看当前的栈中的信息. 下面是一些查看函数调用栈信息的GDB命令: backtracebt 打印当前的函数调用栈的所有信息.如:&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;(gdb) bt#0  func (n=2

fork与exit、_exit的配合使用

#include "light.h" int main(int argc, char *argv[]) { printf("Hello world\n"); write(STDOUT_FILENO, "Ciao\n", 5); if (fork() == -1) errExit("fork"); /* Both child and parent continue execution here */ exit(EXIT_SUCC

gdb查看线程堆栈信息

查看堆栈:gdb -quiet -batch -ex='thread apply all bt' -p pid查看运行位置:gdb -quiet -batch -ex='thread apply all x $pc' -p pid

GDB查看源程序

显示源代码 GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中.不然就看不到源程序了.当程序停下来以后,GDB会报告程序停在了那个文件的第几行上.你可以用list命令来打印程序的源代码.还是来看一看查看源代码的GDB命令吧. list <linenum> 显示程序第linenum行的周围的源程序. list <function> 显示函数名为function的函数的源程序. list 显示当前行后面的源程序. list - 显

C#照片、图片查看器编写 或调用Windows查看器于窗体中

问题描述 我想实现的功能(可以参考Win7中的图片查看器,只要能相看.放大.缩小.移动就行)是:有一个窗体,在上面可以显示图片:在窗体上有一个放大和缩小按钮,放大按钮可以实现图片的放大,缩小可以实现图片的缩小:鼠标的滑轮在图片上可以进行图片的放大与缩小:可以对图片进行移动大致的功能和Windows照片查看器差不多.另外,如若知道怎样调用Windows照片查看器也行,但调用的查处查看器要在一个指定的窗体上打开,不要弹出一个窗体(弹出一个窗体我会,谢谢!)我是用C#中的pictureBox控件来实现

SpringBoot之退出服务(exit)时调用自定义的销毁方法

我们在工作中有时候可能会遇到这样场景,需要在退出容器的时候执行某些操作.SpringBoot中有两种方法可以供我们来选择(其实就是spring中我们常用的方式.只是destory-method是在XML中配置的,SpringBoot是去配置化.所以这里就不提这种方式了),一种是实现DisposableBean接口,一种是使用@PreDestroy注解.OK,下面我写两个例子看一下: DisposableBean接口 我们可以通过实现这个接口来在容器退出的时候执行某些操作.例子如下: packag

_exit()函数与exit()函数的区别

exit()在结束调用它的进程之前,要进行如下步骤: 1.cleanup(): 2.在atexit()注册的函数: 'exit()'与'_exit()'有不少区别在使用'fork()',特别是'vfork()'时变得很 突出. 'exit()'与'_exit()'的基本区别在于前一个调用实施与调用库里用户状态结构 (user-mode constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序 (译者注:自定义清除程序由atexit函数定义,可定义多次,并以倒序执行)