Gdb 具有优化二进制文件的多线程应用程序中zmq库中的核心转储

Gdb 具有优化二进制文件的多线程应用程序中zmq库中的核心转储,gdb,zeromq,coredump,Gdb,Zeromq,Coredump,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库上的核心转储发生在具有优化二进制文件的字段(尚不可复制)上

#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的误用(可能是两个不同的线程使用相同的zmq套接字或其他一些内存损坏),我想知道我还能从这个内核转储中得到什么

首先,我可以看到在转储时总共有102个线程在运行。他们中的许多人都在等待

#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(错误地址)

我能试着从拆卸中得到什么吗?我过去没有调试过很多反汇编。但在这种情况下,如果我能得到任何线索,我可以跳进去

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


谢谢。

在gdb中,在问题顶部显示的线程中键入
frame 2
,然后键入
print*(char*)$rdi
。这应该显示zmq#u abort在中止进程之前打印出的错误消息。如果没有看到代码,这是不可能的。我没有提到,我从/lib64/libzmq.so.5(gdb)print*(char*)中得到了errno作为14=EFAULT(坏地址)@Mark Plotnick,(gdb)f2#2 0x00007f44a1f74759$rdi无法访问gdb中地址0x7c2(gdb)处的内存,请在问题顶部显示的线程中键入
frame 2
,然后键入
print*(char*)$rdi
。这应该显示zmq#u abort在中止进程之前打印出的错误消息。如果没有看到代码,这是不可能的。我没有提到,我从/lib64/libzmq.so.5(gdb)print*(char*)中得到了errno作为14=EFAULT(坏地址)@Mark Plotnick,(gdb)f2#2 0x00007f44a1f74759$rdi无法访问地址0x7c2(gdb)处的内存