如何在调试器中运行CTest测试

时间:2017-10-27 18:14:36

标签: cmake gdb ctest

假设在CMakeLists.txt中我有

add_executable(mytarget main.cpp)

enable_testing()
add_test(mytarget_test0 mytarget -option0)

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

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

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

2 个答案:

答案 0 :(得分:4)

可以使用参数获取测试命令:

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

然后使用regexp可以获取gdb的命令行参数

答案 1 :(得分:0)

我使用以下程序:

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

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

如果您使用的是IDE(例如QtCreator),则可以通过失败的测试用例进行调试。