【问题标题】:Run boost unit tests under debugger在调试器下运行 boost 单元测试
【发布时间】:2014-01-28 09:34:15
【问题描述】:
我使用 VS 2010。
我需要运行由BOOST_AUTO_TEST_SUITEs 组成的.exe 在调试器下测试我的库,因为我遇到内存访问冲突和内存泄漏。我没有主要功能,只有 exe(以及 .cpp 文件)。
如何在调试器下运行这个exe?
更新
如果您有一个包含多个项目的解决方案,并且您需要运行 1 个包含单元测试的项目,例如在调试器下,您需要:
- 在
Solution explorer中右键这个项目
- 点击
"Set as StartUp project"
- 放一些断点
我个人不知道我需要将我的项目设置为启动。
【问题讨论】:
标签:
visual-studio-2010
visual-studio
debugging
boost
boost-test
【解决方案1】:
更新
如果您有一个包含多个项目的解决方案,并且您需要运行 1 个包含单元测试的项目,例如在调试器下,您需要:
- 在
Solution explorer这个项目上右击
- 点击
"Set as StartUp project"
- 放一些断点
我个人不知道我需要将我的项目设置为启动。
【解决方案2】:
您可以尝试通过多种方式调试您的测试套件,我建议您按照以下顺序进行处理:
设置BOOST_TEST_CATCH_SYSTEM_ERRORS 环境变量以获得更好的失败堆栈跟踪。
在(所有)测试的开始和结束大括号处设置断点,因为您的问题很可能与测试有关,而不是与框架和测试的设置有关。
在 Visual Studio 中打开 boost/test/impl/unit_test_main.ipp 包含文件并在 unit_test_main 方法中设置断点。您将逐步浏览测试执行监视器,但这很少能比简单地查看测试本身提供更多的洞察力。
这很少需要,但您也可以使用 Debug + Windows + Breakpoints + New, Function 从第一个 main 显式开始。在 CRT 启动之前,可以在 Windows 上调用四种主要方法:mainCRTStartup、wmainCRTStartup、WinMainCRTStartup、wWinMainCRTStartup.
对于内存泄漏,请确保使用带有订单分配 ID 的 --detect-memory-leak 开关:
执行监视器提供有限的检测内存泄漏的能力
在程序执行期间,并在特定的程序上中断程序执行
内存分配顺序号(1 - 程序中的第一次内存分配,
2 - 秒等)。
此外,检查如何run individual tests by name,如果您可以仅隔离测试的错误子集,通常会使调试更容易。