我正在调试一个非常大的Qt-3应用程序。该应用程序进行了大量的预处理,然后接收SIGPIPE信号.一旦我得到SIGPIPE,我就会写下几个回溯的条目。
#0 .. __write_nocancel () from libpthread.so
#1 .. _IceTransFreeConnInfo () from libICE.so.6
#2 .. _IceWrite () from libICE.so.6
#3 .. _IceFlush () from libICE.so.6我们的应用程序有一个信号处理程序。我所做的就是忽略使用signal(SIGPIPE, SIG_IGN)的SIGPIPE,认为即使我收到这个信号,我的应用程序也会继续运行。但是现在我意识到它不会那样工作,如果我在收到SIGPIPE之后继续,它就会存在。
我对如何调试这个问题一无所知。此信号不是由我们的应用程序直接从套接字调用中产生的。它来自libICE。我说的对吗?请给出一些关于如何调试的提示。
提前谢谢。
发布于 2012-02-03 22:16:03
该信号来自内核,是write(2)对文件描述符(接收方已死亡或执行shutdown(2) )的结果。
听起来好像代码中有什么东西搞砸了属于libICE.so的文件描述符,而不是属于您的。
您的第一步可能是在strace下运行应用程序,然后分析日志,以确切地了解libICE正在编写的FD是如何被搞砸的。
一旦您知道了正在发生的事情,请使用GDB catch syscall命令来找出它正在发生的位置。
https://stackoverflow.com/questions/9111237
复制相似问题