在发布模式下进行Qt调试 - 所有方法都不起作用

时间:2016-01-19 17:08:03

标签: c++ qt makefile qt-creator

我正在尝试在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标志在那里。

所有这一切的结果是应用程序花费的时间几乎是构建的两倍,但它与之前的大小完全相同,并且没有任何调试符号并且尝试调试它没有成功。

我还能做什么?我知道这是可能的,但寻找其他答案只是指示我使用那些标志,这根本没有帮助(只是使构建更慢)

2 个答案:

答案 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,如果有任何帮助的话。