首页 > 解决方案 > 使用 mingw730 32 位在 Qt 5.12 项目的发布版本中偏移到代码位置

问题描述

我有一个 Qt 项目,其中包含大量客户遗留代码库(很遗憾,我不能自由发布)。使用 qmake/QtCreator 调试构建,但发布构建甚至在点击 main 之前就崩溃了。我的怀疑是一些静态初始化。当我在 Qt Creator 中运行调试器时,我得到一个分段错误和一个反汇编跟踪。没有符号,没有真正可用的堆栈跟踪。关于如何解决这个问题的任何提示?我可以将发生崩溃的进程地址解析为代码中的符号吗?

编辑:反汇编如下所示:

0:000> u
ProgrammName+0x39b40:
00439b40 8b842468010000  mov     eax,dword ptr [esp+168h]
00439b47 8384246801000004 add     dword ptr [esp+168h],4
00439b4f 89fa            mov     edx,edi
00439b51 8b00            mov     eax,dword ptr [eax]
00439b53 85c0            test    eax,eax
00439b55 0f8461f6ffff    je      ProgrammName+0x391bc (004391bc)
00439b5b 85db            test    ebx,ebx
00439b5d 8d4801          lea     ecx,[eax+1]
0:000> u
ProgrammName+0x39b60:
00439b60 0fb600          movzx   eax,byte ptr [eax]
00439b63 0f8ef7000000    jle     ProgrammName+0x39c60 (00439c60)
00439b69 84c0            test    al,al
00439b6b 750d            jne     ProgrammName+0x39b7a (00439b7a)
00439b6d e9ee000000      jmp     ProgrammName+0x39c60 (00439c60)
00439b72 84c0            test    al,al
00439b74 0f8442f6ffff    je      ProgrammName+0x391bc (004391bc)
00439b7a 83eb01          sub     ebx,1

我的想法是ProgramName+0xXXXX地址应该以某种方式可以翻译成符号。

标签: c++qtmingw32

解决方案


好的,找到了解决方案:https ://forum.qt.io/topic/2363/solved-how-to-build-release-with-debug-info-mingw/4

基本上它是关于构建发布,但保留调试符号。我的 Qt 项目文件的补充是

QMAKE_CXXFLAGS_RELEASE += -g
QMAKE_CFLAGS_RELEASE += -g
QMAKE_LFLAGS_RELEASE =

推荐阅读