假设在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
答案 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),则可以通过失败的测试用例进行调试。