我正在尝试在Qt
中使用MinGW
构建我的QtCreator
应用,以尝试调试仅发布版本的崩溃。
以下是我在.pro
文件中添加的内容(也尝试将其直接放入qmake.conf
):
QMAKE_CFLAGS_RELEASE += -g
QMAKE_CXXFLAGS_RELEASE += -g
QMAKE_CXXFLAGS += -g
以及尝试
QMAKE_CFLAGS_RELEASE += -ggdb
QMAKE_CXXFLAGS_RELEASE += -ggdb
QMAKE_CXXFLAGS += -ggdb
我单独或一起尝试过这样的话:
QMAKE_CFLAGS_RELEASE += -g
QMAKE_CXXFLAGS_RELEASE += -g
QMAKE_CXXFLAGS += -g
QMAKE_CFLAGS_RELEASE += -ggdb
QMAKE_CXXFLAGS_RELEASE += -ggdb
QMAKE_CXXFLAGS += -ggdb
我还手动编辑了生成的Makefile
(确切地说Makefile.Release
并检查了Makefile.Debug
以防万一)以删除NO_DEBUG
标记(我不知道'}知道为什么要放在那里)并确保-g
和-ggdb
标志在那里。
所有这一切的结果是应用程序花费的时间几乎是构建的两倍,但它与之前的大小完全相同,并且没有任何调试符号并且尝试调试它没有成功。
我还能做什么?我知道这是可能的,但寻找其他答案只是指示我使用那些标志,这根本没有帮助(只是使构建更慢)
答案 0 :(得分:3)
在qmake.conf中(无法回想起现在的位置),默认行为设置为:
QMAKE_LFLAGS_RELEASE = -Wl,-s
-s表示链接器取消符号信息。因此,除了您设置的标志之外,还需要清除QMAKE_LFLAGS_RELEASE中的标志(或覆盖)。在您的情况下,只需将其设置为空即可,因此在.pro文件中添加:
QMAKE_LFLAGS_RELEASE =
进一步说明
如果将行message(QMAKESPEC: $$QMAKESPEC)
添加到.pro文件中,则在运行qmake时,您将看到make spec的路径。查看qmake.conf文件(它将包含)并逐步完成它们。
假设您正在使用Windows(因为我没有看到-sl,-s选项在Linux中为Qt 5.5.1设置了规范),那么有问题的文件是:
<path-to-qt>/5.5/gcc_64/mkspecs/win32-g++/qmake.conf
无论如何,我没有看到任何其他有用的标志设置(我使用linux所以这只是通过眼睛检查。但是如果你担心,那么将以下内容添加到.pro文件中:
message(QMAKE_LFLAGS_RELEASE: $$QMAKE_LFLAGS_RELEASE)
要在进行更改之前进行检查,然后您将全面了解正在进行的操作:)
答案 1 :(得分:1)
我刚想通了,之后只看到了@ code_fodder的答案。看起来@code_fodder基本上是正确的,但我正在添加更多细节以反映帮助我的精确步骤。
我在Qt Creator项目设置中指定了qmake
个参数,如下所示:
QMAKE_CXXFLAGS+=-g QMAKE_LFLAGS_RELEASE-=-Wl,-s
这实际上会将-g
添加到编译器标志中,并从链接器标志中删除-Wl,-s
(它会删除所有符号)。然后我运行了qmake
并进行了完全重建。之后,调试一些工作 - 正如您对发布版本的期望:由于某种随机的方式从一行跳到另一行优化,但至少它是有效的。
我在64位Windows 7系统上使用32位Qt 5.5.1和捆绑的MinGW,如果有任何帮助的话。