停止VC ++调试器步入operator new

时间:2013-03-19 12:11:38

标签: visual-studio-2008 visual-c++

在单步执行代码时非常烦人,每次创建新对象时,调试器都不会直接进入构造函数,而是通过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);
        }

有没有办法有选择地停止特定的功能/类进入,或者其他一些方法我可以避免这种情况?

2 个答案:

答案 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',它将为您提供可以进入的功能列表。所以在这里你可以避免所有新的调用,并选择你介入的构造函数。