我有一个基于UnitTest ++的单元测试项目。我通常在代码的最后一行放置一个断点,以便在其中一个测试失败时我可以检查控制台:
n = UnitTest::RunAllTests();
if ( n != 0 )
{
// place breakpoint here
return n;
}
return n;
但每次我从SVN重新签出代码时,我都必须重新插入它。是否有可能 在某种程度上由编译器放置断点?:
n = UnitTest::RunAllTests();
if ( n != 0 )
{
// place breakpoint here
#ifdef __MSVC__
@!!!$$$??___BREAKPOINT;
#endif
return n;
}
return n;
答案 0 :(得分:58)
使用__debugbreak()
内在函数(需要包含<intrin.h>
)。
使用__debugbreak()
比直接编写__asm { int 3 }
更可取,因为在编译x64体系结构的代码时不允许内联汇编。
为了记录,在Linux和Mac上,使用GCC,我正在使用__builtin_trap()
。
答案 1 :(得分:18)
答案 2 :(得分:9)
您可以在C或C ++中使用它
__asm
{
int 3
}
答案 3 :(得分:3)
如果您正在使用VC6(是的,已过时但仍在某些地方/项目中使用),DebugBreak()
将起作用,但您最终可能会陷入某个模糊的位置,深入了解Windows DLL,您必须从中行走堆叠回你的代码。
这就是我在MFC中使用ASSERT()
或在“标准”代码中使用assert()
的原因。
你的例子会这样:
n = UnitTest::RunAllTests();
ASSERT(n == 0);
//assert(n == 0);
return n;
如果您不需要结果并希望仅用于调试,您也可以
if(0 != UnitTest::RunAllTests())
{
ASSERT(FALSE);
//assert(false);
}
答案 4 :(得分:0)
如何使用Debug或Trace方法输出控制台信息。这可能是一种比依赖断点更好的方法。
答案 5 :(得分:0)
您多久检查一次SVN的项目?这通常是我每个项目只执行一次,或者当我重建我的PC时。
如果您还要检查项目文件,则应将断点存储在项目文件中。
我认为它在.suo文件中。如果你愿意的话,你也可以把它置于SVN控制之下,尽管我不愿意。