【问题标题】:How to get Conan/CMake to give me debugging information to find a segfault如何让柯南/CMake 给我调试信息以查找段错误
【发布时间】:2021-06-12 00:34:46
【问题描述】:

我需要调试一个段错误。我正在使用柯南 (conan build ..) 进行编译。我将此添加到 CMakeLists.txt

set(CMAKE_BUILD_TYPE "Debug")

但是,当我运行二进制文件并得到段错误时,我得到了

Segmentation fault
ERROR: conanfile.py: Error in build() method, line 15
        self.run("bin/main")
        ConanException: Error 139 while executing bin/main

我也在构建步骤的 conanfile.py 中尝试过这个

cmake.definitions["CMAKE_BUILD_TYPE"] = "Debug"

我应该怎么做才能获得有关我为什么会出现段错误的信息?

【问题讨论】:

  • 一般来说最好避免在 CMakeLists.txt 代码中定义构建类型,比如 set(CMAKE_BUILD_TYPE "Debug")。如有必要,柯南将在工具链中定义它,或者在命令行中使用-DCMAKE_BUILD_TYPE 传递它,具体取决于生成器。对于多配置生成器,在cmake --build . --config Debug 中使用相同类型进行构建很重要。一般来说,了解有关您的系统的更多信息会很有用:操作系统、编译器。

标签: c++ cmake segmentation-fault conan


【解决方案1】:

您不能将柯南配置为“获取调试信息”。

对于临时调试,我建议在调试器中手动运行程序。

但是,您可以将操作系统配置为在出现段错误时生成程序的核心转储。这样你就可以让柯南在没有调试器的情况下执行程序,然后使用调试器检查内存转储。

也就是说,通过内存转储可以看到程序的状态,不一定能说明一切,并且逐步调试可能会显示太多信息并且很难找到错误。一个很好的工具是构建具有未定义行为的程序并解决清理程序并希望它们能够捕获错误。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多