我在Windows 7下使用CMake
和VC++
,一切正常。现在,我想测试qtcreator
,但我不能强制调试标志。我正在使用MinGW
生成器和cmake并在命令行上添加-DCMAKE_BUILD_TYPE=Debug
。
我可以使用QTCreator内部的CMake功能生成-DCMAKE_BUILD_TYPE=Debug
的项目。它编译得很好,我可以运行它。但是,我无法调试它,因为QTCreator抱怨它不是“可调试的执行”。我还尝试使用命令行直接生成项目。
我做错了什么?
答案 0 :(得分:2)
很难弄清楚出了什么问题,所以我会给你一些提示:
在CMakeChace.txt文件中设置CMAKE_VERBOSE_MAKEFILE
并再次运行cmake
。然后拨打make clean
和make
。然后检查输出并检查传递给编译器的标志。
检查CMakeCache.txt文件以查找为特定版本传递给编译器的标志。检查是否为调试模式传递了-g和-O0。
尝试构建一个非常简单的程序,并使用-g和-O0手动编译它。然后尝试使用gdb和QtCreator(作为外部应用程序)对其进行调试,并检查QtCreator本身或编译器选项是否存在问题。
答案 1 :(得分:2)
我今天遇到这个问题就像你一样。很可能你使用VS CDB而不是GDB。
这是我的解决方案:
(0)从http://mingw-w64.sourceforge.net/index.php
下载MinGW和GCC(1)设置环境变量,因此Qt-creator可以自动检测MinGW和GCC
设置MINGW_DIR 将%MINGW_DIR%添加到PATH
(2)重新启动Qt-creator
open Qt-creator - >工具 - >选项 - >构建与安培;运行 - >试剂盒
手动添加" MinGW-GCC" (或其他你喜欢的名字)
检查编译器,gcc应自动检测
设置Debugger - >编辑:GDB Engine并选择gdb.exe文件夹
确保未使用CDB
答案 2 :(得分:1)
我认为你没有做错任何事。
在调试模式下使用MSVC时,调试符号(* .pdb文件)生成在与构建的二进制文件相同的文件夹中。稍后可以使用它们来调试应用程序。
使用MingW时,不会生成其他文件。将CMAKE_BUILD_TYPE配置为Debug
或RelWithDebInfo
时,选项-g
将添加到编译命令行。这会在二进制文件中生成调试信息。然后,您将能够使用GDB调试您的程序(您可以在Qt Creator中尝试它,它可以工作;)
您可以通过更改CMAKE_BUILD_TYPE值并检查生成的二进制文件的大小来验证这一点。我只是测试我的一个项目:
CMAKE_BUILD_TYPE Executable size
<empty> 1890 Ko
Release 1281 Ko
Debug 14743 Ko
MinSizeRel 1027 Ko
RelWithDebInfo 15859 Ko
答案 3 :(得分:0)
我对QtCreator不太熟悉,但我会尝试通过解释我曾经为Eclipse CDT4生成makefile的方法来帮助(这可能是你尝试作为Windows IDE的另一种选择)。
首先,您确定您的cmake可以生成QtCreator makefile吗?我问,因为至少在Fedora上,cmake没有列出Qtcreator作为选项。
在命令行上键入“cmake”应列出适用于您的平台的生成器。 QtCreator是其中之一吗?
其次,cmake很可能没有为您的编译器提供该选项。这并不一定意味着您将无法从该编译器调试代码。例如,我在没有设置调试标志的情况下为Eclipse CDT生成了文件,但我仍然能够正常调试。
作为参考,这里是我用于Eclipse CDT的命令列表(来自项目根目录,cmakelists.txt文件位于src子目录中):
mkdir eclipse-project
cd eclipse-project
cmake ../src -G "Eclipse CDT - Unix Makefiles"
然后我可以从Eclipse打开项目并进行调试。我怀疑你是否能够做同样的事情,cmake是否知道如何为你的编译器启用调试。