Приложение Qt MacOs аварийно завершает работу при выходе с помощью dyld :: fastBlindLazySymbol и sold_stub_binder - PullRequest
0 голосов
/ 16 января 2020

Я использую 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

enter image description here

Это все, что я знаю о крэ 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. Объект является глобальным (я знаю, что это плохо, но я не знал, что это было, когда я запускаю проект), может ли это быть причиной сбоя приложения? Или что-то еще мне не хватает в адресном дезинфицирующем средстве?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...