CMake + qtcreator + MinGW + Debug mode + Windows 7
CMake + qtcreator + MinGW + Debug mode + Windows 7
我在Windows 7下使用CMake
和VC++
,一切正常。现在,我想测试qtcreator
但我不能强制调试标志。我正在使用带有 cmake MinGW
生成器并在命令行上添加-DCMAKE_BUILD_TYPE=Debug
。
我可以在 QTCreator 内部使用 CMake 功能生成带有 -DCMAKE_BUILD_TYPE=Debug
的项目。它编译得很好,我可以运行它。但是,我无法调试它,因为 QTCreator 抱怨它不是"可调试的执行"。我还尝试使用命令行直接生成项目。
我做错了什么?
很难弄清楚出了什么问题,所以我会给你一些提示:
-
在 CMakeChace.txt 文件中设置
CMAKE_VERBOSE_MAKEFILE
并再次运行cmake
。然后打电话给make clean
并make
.然后检查输出并检查传递给编译器的标志。 -
检查 CMakeCache.txt 文件中是否有传递给特定构建的编译器的标志。检查是否为调试模式传递了 -g 和 -O0。
-
尝试构建一个非常简单的程序,并使用 -g 和 -O0 手动编译它。然后尝试使用 gdb 和 QtCreator(作为外部应用程序)调试它,并检查这是 QtCreator 本身还是编译器选项的问题。
我今天和你一样遇到了这个问题。很可能您使用的是VS CDB而不是GDB。
这是我的解决方案:
(0) 从 http://mingw-w64.sourceforge.net/index.php 下载MinGW和GCC
(1)设置环境变量,使Qt-creator可以自动检测MinGW和GCC
设置MINGW_DIR将 %MINGW_DIR% 添加到路径
(2) 重启Qt-creator
打开Qt-creator->工具->选项->构建和运行->工具包
手动添加"MinGW-GCC"(或您喜欢的其他名称)
检查编译器,GCC 应该自动检测
设置调试器 ->编辑:GDB 引擎并选择 gdb 的文件夹.exe
确保未使用CDB
我认为你没有做错什么。
在调试模式下使用 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
我对QtCreator不太熟悉,但我会尝试通过解释我用来为Eclipse CDT4生成makefile的内容来提供帮助(这可能是您尝试作为Windows IDE的另一个选项)。
首先,你确定你的cmake可以生成QtCreator makefiles吗?我问是因为至少在Fedora上,cmake没有将Qtcreator列为选项。
在命令行上键入"cmake"应该列出可用于您的平台的生成器。QtCreator是其中之一吗?
其次,cmake 很可能只是没有编译器的该选项。这并不一定意味着您将无法从该编译器调试代码。例如,我在没有设置调试标志的情况下为 Eclipse CDT 生成了文件,但仍然能够很好地进行调试。
作为参考,以下是我用于 Eclipse CDT 的命令列表(从项目根目录 dir,cmakelists.txt 文件位于 src 子目录中):
mkdir eclipse-project
cd eclipse-project
cmake ../src -G "Eclipse CDT - Unix Makefiles"
然后我可以从 Eclipse 打开项目并进行调试。我怀疑你也能做到这一点,无论 cmake 是否知道如何为编译器启用调试。
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux for Windows上编译C++代码时出错
- 在Windows上用C++裁剪HBITMAP
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 在Windows中以.exe的形式运行c++
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 无法在windows控制台中为C++程序提供必要的输入
- 在Windows中查找扬声器输出的当前音量级别
- Windows.h与GLFW.h的接口
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- CMake + qtcreator + MinGW + Debug mode + Windows 7
- Windows 10 OpenGL BSOD, "Kernel Mode Trap"