在单步执行代码时非常烦人,每次创建新对象时,调试器都不会直接进入构造函数,而是通过new.cpp中的CRT new
运算符:
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
{ // try to allocate size bytes
void *p;
while ((p = malloc(size)) == 0)
if (_callnewh(size) == 0)
{ // report no memory
static const std::bad_alloc nomem;
_RAISE(nomem);
}
return (p);
}
有没有办法有选择地停止特定的功能/类进入,或者其他一些方法我可以避免这种情况?
答案 0 :(得分:1)
Andy Pennell的博客文章“How to Not Step Into Functions using the Visual C++ Debugger”提供了大部分答案。我也试图通过坚持不懈(或者我认为是堕落)来解决这个问题。我尝试了字母表中的每个字母,直到我用o。* = nostepinto命中。
由此,在模块窗口中注意到它说msvcr100d.dll!operator new,导致我尝试使用“operator new。*”作为正则表达式。
有效!安迪的诀窍是“操作员新的。* = nostepinto”
n.b。我使用的是VS 2010,但同样适用于VS 2008
答案 1 :(得分:0)
Visual Studio有一个功能,您可以选择要进入的功能。 所以如果你有这样的代码:
foo * p = new foo(new baz(new flip()));
右键单击以显示弹出菜单。从那里选择'Step into',它将为您提供可以进入的功能列表。所以在这里你可以避免所有新的调用,并选择你介入的构造函数。