我有一个 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
地址应该可以某种方式转换为符号。
最佳答案
好的,找到解决方案: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 =
关于c++ - 使用 mingw730 32 位的 Qt 5.12 项目发布构建中代码位置的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804224/