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
指向应用程序代码的其他线程看起来并不可疑。
打印的错误号为14 = EFAULT(错误地址)。
我可以尝试从反汇编中获取任何东西吗?过去我没有调试过很多反汇编程序。但是在这种情况下,如果我有任何线索,我就可以加入。
任何(其他)建议/指针也将受到高度赞赏。
谢谢。