【问题标题】:How to run CTest test in debugger如何在调试器中运行 CTest 测试
【发布时间】:2018-04-09 10:06:05
【问题描述】:

假设在 CMakeLists.txt 我有

add_executable(mytarget main.cpp)

enable_testing()
add_test(mytarget_test0 mytarget -option0)

有什么简单的方法可以让我在 GDB 中使用来自某些特定 CTest 测试的所有命令行选项运行 mytarget? (除了在 CMakeLists 中搜索 test 然后手动将 add_test 参数复制粘贴到命令行?)

现实生活场景:我使用 ctest 运行所有测试,有一个失败,我想在调试器中快速打开它。

在其他构建系统中,有使用 gdb 的命令行参数,例如在 Meson meson test --gdb testname 中,在 bazel bazel --run_under=gdbserver 中。我没有为 CTest 找到类似的东西

【问题讨论】:

  • 这不是 CTest 的目的。您可以轻松地从 CMake 文件中复制命令。
  • @usr1234567 我应该用什么来代替 CTest ?我想用各种命令行参数自动运行目标

标签: cmake gdb ctest


【解决方案1】:

可以获取带参数的测试命令:

ctest -R $regex_matching_test -V -N

作为输出,你会得到类似的东西:

Test project ../cmake-build-debug-gcc7
Constructing a list of tests
Done constructing a list of tests

1: Test command: ../cmake-build-debug-gcc7/my_tool  "-v" "test0"
  Test #1: my_tool_test0

Total Tests: 1

然后使用正则表达式可以获取 gdb 的命令行参数

【讨论】:

    【解决方案2】:

    我使用以下程序:

    make clean
    make # Build target and all unit tests
    make test # Run all unit tests: make test
    

    您将获得一个结果列表和一些输出,具体取决于单元测试框架的工作。修复问题并在 gdb 中重新运行失败的测试,直到成功。重新启动整个过程。

    如果您使用的是 IDE(例如 QtCreator),很容易通过失败的测试用例进行调试。

    【讨论】:

    • make test 不会在调试器中启动测试。实际上,如果您运行gdb --args make test,您将调试make,而不是您的测试。顺便说一句,您也可以使用ctest 命令运行测试,即使您使用 ninja 或 msvc 构建它也可以工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多