当前位置:  技术问答>linux和unix

为什么在gdb下无法用signal捕捉到信号?

    来源: 互联网  发布时间:2016-04-01

    本文导语:  比如下列程序,在gdb中运行会直接退出 而正常启动运行的时候则能转到信号处理函数handle_signal中 #include  #include  void InitSignal(void); void handle_signal(int s) ; /*初始化时及每次处理完时调用*/ void InitSignal(void) {  signa...

比如下列程序,在gdb中运行会直接退出
而正常启动运行的时候则能转到信号处理函数handle_signal中

#include 
#include 

void InitSignal(void);
void handle_signal(int s) ;

/*初始化时及每次处理完时调用*/
void InitSignal(void)
{
 signal (SIGPIPE, handle_signal);
}

/*信号处理函数*/
void handle_signal(int s)
{
 printf ("SIGPIPE occured.n");
 InitSignal();
}

void
fun ()
{
        raise (SIGPIPE);
        printf ("run %sn", __func__);
}

int
main ()
{
        InitSignal ();
        sleep (1);
        fun ();
        printf ("run %sn", __func__);
}

|
我的怎么可以:
(gdb) b main
Breakpoint 1 at 0x80484a9: file address.c, line 30.
(gdb) s
The program is not being run.
(gdb) r
Starting program: /home/test/a.out

Breakpoint 1, main () at address.c:30
30              InitSignal ();
(gdb) s
InitSignal () at address.c:10
10      signal (SIGPIPE, handle_signal);
(gdb) s
11      }
(gdb) s
main () at address.c:31
31              sleep (1);
(gdb) s
32              fun ();
(gdb) s
fun () at address.c:23
23              raise (SIGPIPE);
(gdb) s

Program received signal SIGPIPE, Broken pipe.
0xffffe410 in __kernel_vsyscall ()
(gdb) s
Single stepping until exit from function __kernel_vsyscall,
which has no line number information.
handle_signal (s=13) at address.c:15
15      {
(gdb) s
16      printf ("SIGPIPE occured.n");
(gdb) s
SIGPIPE occured.
17      InitSignal();
(gdb) s
InitSignal () at address.c:10
10      signal (SIGPIPE, handle_signal);
(gdb) s
11      }
(gdb) s
handle_signal (s=13) at address.c:18
18      }
(gdb) s
0xffffe410 in __kernel_vsyscall ()
(gdb) s
Single stepping until exit from function __kernel_vsyscall,
which has no line number information.
0xb7e2e9a1 in raise () from /lib/tls/i686/cmov/libc.so.6
(gdb) s
Single stepping until exit from function raise,
which has no line number information.
fun () at address.c:24
24              printf ("run %sn", __func__);
(gdb) s
run fun
25      }
(gdb) s
main () at address.c:33
33              printf ("run %sn", __func__);
(gdb) s
run main
34      }
(gdb) s
0xb7e1aea2 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
(gdb) s
Single stepping until exit from function __libc_start_main,
which has no line number information.

Program exited with code 011.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在rh9上无法使用gdb是怎么回事呢
  • 关于GDB无法调试segmentaton fault的问题,调试就死机
  • 求助:Debian下gdb无法调试出段错误位置
  • gdb中symbol无法识别
  • 牛哥们过来救救命啊?困绕了我几天的GDB无法调试的问题?帮忙看看,谢谢!
  • 虚拟机上linux GDB无法安装
  • 关于在linux gdb调试出现的段错误 无法具体定位
  • gdb for循环无法打印
  • FC12 GDB调试无法产生core文件,是为什么呢?
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 gdb调试无法定位段错误 求救
  • 如何使用linux下gdb来调试python程序
  • 使用gcc gdb的大牛进来说说gdb的强大之处在哪。我刚学linux了,vim我确实体会到了其强大之处。而对gcc gdb,体会不到gdb这工具的强大之处。
  • 请教 make gdb-6.4 出现 make[4]: Entering directory `/tmp/gdb-6.4/gdb/doc'
  • GDB调试 GDB挂了。。。
  • gdb 如何调试带命令行参数的程序 如 gdb a.out arg1,arg2
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • gdb调试时命令行参数如何输入?比如main(int argc,char **argv)中,我要把一个filename作为argv[1]传入给gdb调试
  • linux gdb: 我在一台机器上编译的程序用GDB可以调试,把程序放到另外一台机器上调试,调试信息就没有了 这是什么原因呢?
  • NOSQL iis7站长之家
  • gdb 使用问题请教
  • gdb的问题,请教,会者不难,快来拿分
  • gdb调试动态链接库
  • gdb高手请指教
  • gdb如何进行调试?
  • 请问,有人研究过gdb-insight源码吗?
  • 在linux下除了gdb外还有没其他好用的调试器?
  • gdb调试
  • Linux下gdb如何追踪进入子进程??急急7777777777777
  • 如何编译gdb
  • 怎样在windows中编译生成gdb
  • gdb调试时的文件格式问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3