使用 cmake 时未创建调试符号

Posted

技术标签:

【中文标题】使用 cmake 时未创建调试符号【英文标题】:Debug symbols not created when using cmake 【发布时间】:2014-07-20 09:08:54 【问题描述】:

添加后使用cmake编译github.com/RainerKuemmerle/g2o的c++代码库

set(CMAKE_BUILD_TYPE Debug)

以便能够调试应用程序。然后它创建了一个名为“g2o”的构建文件。但是当我尝试使用 gdb 进行调试时,这是我得到的输出。

user2@arm_machine:~/g2o/trunk/bin$ gdb g2o
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabihf".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /scratch/mbaxkms7/ARM_Programs_mbaxkms7/g2o/trunk/bin/g2o...(no debugging symbols found)...done.
(gdb)

在使用 cmake 时有没有其他方法可以生成调试信息?

【问题讨论】:

g2o是一个什么样的目标?它是可执行文件、静态库还是共享库?您的项目 CMakeLists.txt 是什么样的? 它是一个可执行文件..我正在编译github.com/RainerKuemmerle/g2o的代码库 这可能是项目内部的问题。如果是您的代码,请提供一个显示问题的最小示例。如果不是您的代码,请联系所有者了解该错误。 你用来构建这个项目的命令是什么?也许您应该添加一个MESSAGE( STATUS "CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE" ) 来查看您的构建标志是否被正确解析。 【参考方案1】:

您添加set(CMAKE_BUILD_TYPE Debug) 的方法效果很好。

g2o 是使用Release 选项构建的程序。 Debug 版本的g2o 称为g2o_d。因此,要调试,您需要通过以下方式启动调试器:

user2@arm_machine:~/g2o/trunk/bin$ gdb g2o_d

注意 不同的名称不是CMake 的共同特征,而只是g2o project 的共同特征:

# postfix, based on type
SET(CMAKE_DEBUG_POSTFIX "_d" CACHE STRING "postfix applied to debug build of libraries")
SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "postfix applied to release build of libraries")

【讨论】:

以上是关于使用 cmake 时未创建调试符号的主要内容,如果未能解决你的问题,请参考以下文章

调试不适用于 Android Studio 的 C++/本机库模块(使用 Cmake)

通过 Service Fabric 项目进行调试时未使用环境变量

在 Visual Studio 上的 C++ 项目中将 NetCDF(通过 vcpkg 安装)与 CMake 一起使用时未解析的外部符号

如何使用 cmake 调试 gcc 代码

可以在运行/调试配置中使用 CLion 宏吗?

在 Windows 上使用 Qt Creator 进行调试时未显示 QStrings