Я использую Qt 5.12.1 clang 64 bit на MacOs 10.13.6. Проблема в том, что при выходе из приложения происходит сбой программы, но я действительно не знаю почему. Это перенос с windows на Ma c, поэтому у меня никогда не было шага, когда программа не выполняла sh.
Все, что я знаю, это то, что при отладке она застревает здесь:
0x100e1c52a 48 8b 80 40 01 00 00 movq 0x140(%rax), %rax
0x100e1c531 <+ 7> 48 8b 15 98 8c 04 00 movq 0x48c98(%rip), %rdx # dyld::gLibSystemHelpers
0x100e1c538 <+ 14> 48 85 d2 testq %rdx, %rdx
0x100e1c53b <+ 17> 74 0a je 0x100e1c547 # <+72>
0x100e1c53d <+ 19> 48 8b 4a 08 movq 0x8(%rdx), %rcx
0x100e1c541 <+ 23> 4c 8b 42 10 movq 0x10(%rdx), %r8
0x100e1c545 <+ 27> eb 05 jmp 0x100e1c54c # <+77>
0x100e1c547 <+ 29> 31 c9 xorl %ecx, %ecx
0x100e1c549 <+ 31> 45 31 c0 xorl %r8d, %r8d
0x100e1c54c <+ 34> 48 8d 15 35 8b 04 00 leaq 0x48b35(%rip), %rdx # dyld::gLinkContext
0x100e1c553 <+ 41> 44 89 f6 movl %r14d, %esi
0x100e1c556 <+ 44> ff d0 callq *%rax
0x100e1c558 <+ 46> 5b popq %rbx
0x100e1c559 <+ 47> 41 5e popq %r14
0x100e1c55b <+ 49> 5d popq %rbp
0x100e1c55c <+ 50> c3 retq
0x100e1c55d <+ 51> 48 8d 3d 00 f1 02 00 leaq 0x2f100(%rip), %rdi # "dyld: %s\n"
0x100e1c564 <+ 58> 48 8d 1d 50 f1 02 00 leaq 0x2f150(%rip), %rbx # "fast lazy binding from unknown image"
0x100e1c56b <+ 65> 31 c0 xorl %eax, %eax
0x100e1c56d <+ 67> 48 89 de movq %rbx, %rsi
0x100e1c570 <+ 70> e8 d3 d3 ff ff callq 0x100e19948 # dyld::log(char const*, ...)
0x100e1c575 <+ 75> 48 89 df movq %rbx, %rdi
0x100e1c578 <+ 78> e8 a3 fd ff ff callq 0x100e1c320 # dyld::halt(char const*)
0x100e1c57d <+ 83> 48 89 c3 movq %rax, %rbx
0x100e1c580 <+ 86> 83 fa 01 cmpl $0x1, %edx
0x100e1c583 <+ 89> 75 2c jne 0x100e1c5b1 # <+178>
0x100e1c585 <+ 91> 48 89 df movq %rbx, %rdi
0x100e1c588 <+ 94> e8 87 1c 02 00 callq 0x100e3e214 # __cxa_begin_catch
0x100e1c58d <+ 99> 48 89 c3 movq %rax, %rbx
0x100e1c590 <+ 102> 48 8d 3d fe f0 02 00 leaq 0x2f0fe(%rip), %rdi # "dyld: lazy symbol binding failed: %s\n"
0x100e1c597 <+ 109> 31 c0 xorl %eax, %eax
0x100e1c599 <+ 111> 48 89 de movq %rbx, %rsi
0x100e1c59c <+ 114> e8 a7 d3 ff ff callq 0x100e19948 # dyld::log(char const*, ...)
0x100e1c5a1 <+ 119> 48 89 df movq %rbx, %rdi
0x100e1c5a4 <+ 122> e8 77 fd ff ff callq 0x100e1c320 # dyld::halt(char const*)
0x100e1c5a9 <+ 127> 48 89 c3 movq %rax, %rbx
0x100e1c5ac <+ 130> e8 d7 1c 02 00 callq 0x100e3e288 # __cxa_end_catch
0x100e1c5b1 <+ 135> 48 89 df movq %rbx, %rdi
0x100e1c5b4 <+ 138> e8 c7 e6 02 00 callq 0x100e4ac80 # _Unwind_Resume
0x100e1c5b9 <+ 143> 55 pushq %rbp
0x100e1c5ba <+ 144> 48 89 e5 movq %rsp, %rbp
0x100e1c5bd <+ 147> 48 89 3d ec 8c 04 00 movq %rdi, 0x48cec(%rip) # dyld::sUndefinedHandler
0x100e1c5c4 <+ 154> 5d popq %rbp
0x100e1c5c5 <+ 155> c3 retq
0x100e1c5c6 <+ 156> 55 pushq %rbp
0x100e1c5c7 <+ 157> 48 89 e5 movq %rsp, %rbp
0x100e1c5ca <+ 160> 48 89 d0 movq %rdx, %rax
0x100e1c5cd <+ 163> 48 89 f1 movq %rsi, %rcx
0x100e1c5d0 <+ 166> 31 f6 xorl %esi, %esi
0x100e1c5d2 <+ 168> 48 89 ca movq %rcx, %rdx
0x100e1c5d5 <+ 171> 48 89 c1 movq %rax, %rcx
0x100e1c5d8 <+ 174> 5d popq %rbp
0x100e1c5d9 <+ 175> e9 00 00 00 00 jmp 0x100e1c5de # dyld::findExportedSymbol(char const*, bool, ImageLoader::Symbol const**, ImageLoader const**)
0x100e1c5de <+ 180> 55 pushq %rbp
И в отладчике я получаю:
- dyld :: fastBindLazySymbol (ImageLoader * *, unsigned long) (x86_64) / usr / lib / dyld
- dyld_stub_binder (x86_64) /usr/lib/system/libdyld.dylib
Это все, что я знаю о крэ sh. Кто-нибудь знает, что означают предыдущие строки? Любой совет?
Большое спасибо!
********************* ОБНОВЛЕНИЕ ********* *************
Благодаря Серхио мне удалось использовать Address Sanitizer, и это вывод:
AddressSanitizer:DEADLYSIGNAL
=================================================================
==25849==ERROR: AddressSanitizer: SEGV on unknown address 0x00017e000378 (pc 0x00010983e52a bp 0x7ffeee5ea470 sp 0x7ffeee5ea460 T0)
==25849==The signal is caused by a READ memory access.
#0 0x10983e529 in dyld::fastBindLazySymbol(ImageLoader**, unsigned long) (dyld:x86_64+0x4529)
#1 0x7fff56bfc291 in dyld_stub_binder (libdyld.dylib:x86_64+0x1291)
#2 0x1118ab007 (<unknown module>)
#3 0x10695656a in QSqlDatabasePrivate::~QSqlDatabasePrivate() (QtSql:x86_64+0x556a)
#4 0x106957140 in QSqlDatabase::~QSqlDatabase() (QtSql:x86_64+0x6140)
#5 0x10335a673 in T_AnalisiDati::~T_AnalisiDati() t_analisidati.cpp:35
#6 0x10335a71e in T_AnalisiDati::~T_AnalisiDati() t_analisidati.cpp:33
#7 0x7fff56ca8eec in __cxa_finalize_ranges (libsystem_c.dylib:x86_64+0x5deec)
#8 0x7fff56ca91fd in exit (libsystem_c.dylib:x86_64+0x5e1fd)
#9 0x7fff56bfc01b in start (libdyld.dylib:x86_64+0x101b)
==25849==Register values:
rax = 0x000000017e000238 rbx = 0x00000001118ab008 rcx = 0x0000000000000000 rdx = 0x0000000000000000
rdi = 0x00006100000ca040 rsi = 0x00000000000001c6 rbp = 0x00007ffeee5ea470 rsp = 0x00007ffeee5ea460
r8 = 0x00007ffeee5ea7c0 r9 = 0x00007ffeee5ea7c0 r10 = 0x00007fff8f6280c8 r11 = 0x00000001118ab008
r12 = 0x0000619000007380 r13 = 0x0000000000000002 r14 = 0x00000000000001c6 r15 = 0x00000000000002a0
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (dyld:x86_64+0x4529) in dyld::fastBindLazySymbol(ImageLoader**, unsigned long)
==25849==ABORTING
T_Analisi - это QThread, который использует QSqlDatabase. Объект является глобальным (я знаю, что это плохо, но я не знал, что это было, когда я запускаю проект), может ли это быть причиной сбоя приложения? Или что-то еще мне не хватает в адресном дезинфицирующем средстве?
Спасибо!