Отлаживаю kopete, который стабильно падает при каждом закрытии. Ловит сегфолт в деструкторе класса Client. Выкинул из деструктора всё - не помогло. Из членов у класса - только ClientPrivate* d;.
Класс наследуется от QObject.
Итак, пустой деструктор:
Dump of assembler code for function Client::~Client():
=> 0x00007fa293639900 <+0>: push %rbx
0x00007fa293639901 <+1>: mov %rdi,%rbx
0x00007fa293639904 <+4>: callq 0x7fa293633dd0 <_ZN6ClientD1Ev@plt>
0x00007fa293639909 <+9>: mov %rbx,%rdi
0x00007fa29363990c <+12>: pop %rbx
0x00007fa29363990d <+13>: jmpq 0x7fa2936352f0 <_ZdlPv@plt>
End of assembler dump.
_ZdlPv - это обычный operator delete(void*). Что такое _ZN6ClientD1Ev - это тот же Client::~Client(). Падает в нём:
Dump of assembler code for function _ZN6ClientD1Ev@plt:
=> 0x00007fa293633dd0 <+0>: jmpq *0x2fb242(%rip) # 0x7fa29392f018
0x00007fa293633dd6 <+6>: pushq $0x41
0x00007fa293633ddb <+11>: jmpq 0x7fa2936339b0
End of assembler dump.
(gdb) disassemble 0x7fa29392f018
No function contains specified address.
(gdb) disassemble 0x7fa2936339b0
No function contains specified address.
(gdb) display/i $pc
1: x/i $pc
=> 0x7fa293633dd0 <_ZN6ClientD1Ev@plt>: jmpq *0x2fb242(%rip) # 0x7fa29392f018
(gdb) si
0x00007fa293633dd6 in Client::~Client () from /home/valentine/usr/lib/liboscar.so.1
1: x/i $pc
=> 0x7fa293633dd6 <_ZN6ClientD1Ev@plt+6>: pushq $0x41
Это как? Проигнорили jump? Идем на второй jmpq. Прыгаю внутрь:
(gdb) si
0x00007fa2936339b0 in ?? () from /home/valentine/usr/lib/liboscar.so.1
1: x/i $pc
=> 0x7fa2936339b0: pushq 0x2fb44a(%rip) # 0x7fa29392ee00
(gdb) si
0x00007fa2936339b6 in ?? () from /home/valentine/usr/lib/liboscar.so.1
1: x/i $pc
=> 0x7fa2936339b6: jmpq *0x2fb44c(%rip) # 0x7fa29392ee08
(gdb) si
_dl_runtime_resolve () at ../sysdeps/x86_64/dl-trampoline.S:30
1: x/i $pc
=> 0x7fa2abf862c0 <_dl_runtime_resolve>: sub $0x38,%rsp
И т.д. и попадаю в libfam, откуда выхожу назад в ZN6ClientD1Ev (по более ранему адресу, чем был там раньше) и попадаю в SIGSEGV:
#0 0x000000000000000b in ?? () at /usr/include/qt4/QtCore/qlist.h:494
#1 0x00007fa293639909 in Client::~Client (this=0x2a95560, __in_chrg=<value optimized out>)
at /home/valentine/tmp/1/kdenetwork-4.6.1/kopete/protocols/oscar/liboscar/client.cpp:222
В 1-ом фрейме видно, что я и не выходил из _ZN6ClientD1Ev, а словил лажу там.
Может кто подскажет, где может быть проблема?