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

How to run CTest test in debugger

假设在 CMakeLists.txt 我有

add_executable(mytarget main.cpp)

enable_testing()
add_test(mytarget_test0 mytarget -option0)

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

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

在其他构建系统中,有使用 gdb 的命令行参数,例如在 Meson meson test --gdb testname 中,在 bazel bazel --run_under=gdbserver 中。我没有发现任何与 CTest

类似的东西

我使用以下程序:

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

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

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

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

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 的命令行参数