首页 > 解决方案 > 具有优化二进制的多线程应用程序中 zmq 库中的核心转储

问题描述

zmq 库上的核心转储发生在具有优化二进制文件的字段上(尚不可重现)。

#0 0x00007f44a00801f7 in raise () from /lib64/libc.so.6
#1 0x00007f44a00818e8 in abort () from /lib64/libc.so.6
#2 0x00007f44a1f74759 in zmq::zmq_abort(char const*) () from /lib64/libzmq.so.5
#3 0x00007f44a1fa410d in zmq::tcp_write(int, void const*, unsigned long) () from /lib64/libzmq.so.5
#4 0x00007f44a1f9f417 in zmq::stream_engine_t::out_event() () from /lib64/libzmq.so.5
#5 0x00007f44a1f7437a in zmq::epoll_t::loop() () from /lib64/libzmq.so.5
#6 0x00007f44a1fa83a6 in thread_routine () from /lib64/libzmq.so.5
#7 0x00007f44a1b2ce25 in start_thread () from /lib64/libpthread.so.0
#8 0x00007f44a014334d in clone () from /lib64/libc.so.6enter code here

虽然我正在分析我的应用程序代码并希望找到 zmq 的一些误用(可能由 2 个不同的线程或其他一些内存损坏使用相同的 zmq 套接字),但我想知道我还能从这个核心转储中得到什么?

首先,我可以看到在转储时总共运行了 102 个线程。其中许多都在 epoll_wait 中。

#0  0x00007f44a0143923 in epoll_wait () from /lib64/libc.so.6
#1  0x00007f44a1f74309 in zmq::epoll_t::loop() () from /lib64/libzmq.so.5
#2  0x00007f44a1fa83a6 in thread_routine () from /lib64/libzmq.so.5
#3  0x00007f44a1b2ce25 in start_thread () from /lib64/libpthread.so.0
#4  0x00007f44a014334d in clone () from /lib64/libc.so.6

指向应用程序代码的其他线程看起来并不可疑。

打印的 errno 是 14 = EFAULT(错误地址)。

我可以尝试从反汇编中得到任何东西吗?我过去没有调试过很多反汇编。但在这种情况下,如果我能得到任何线索,我可以加入。

任何(其他)建议/指针也将受到高度赞赏。

谢谢。

标签: gdbzeromqcoredump

解决方案


推荐阅读