c++ - 使用 mingw730 32 位的 Qt 5.12 项目发布构建中代码位置的偏移量

标签 c++ qt mingw32

我有一个 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/

相关文章:

Python QT QNetworkRequest 以 "(process:3265): GLib-ERROR **: Creating pipes for GWakeup: Too many open files"退出

c++ - 在 QT 中以全屏模式播放视频

c++ - std::endl 导致崩溃

c++ - 在 C++ 中为文件 I/O 包含其他文件

c++ - 第 5 行 : Char 54: error: no matching function for call to 'min(int, std::__cxx11::basic_string<char>::size_type)'

类中的 C++ var 没有命名类型

c++ - 将参数 move 到数据成员 : Take parameter by copy or rvalue-ref?

c++ - 真值表到位表达式

c++ - 如何使用 Qt 的 PIMPL 成语?

C++ Windows 二进制文件 : conditions to be used with MinGW