1

单步执行代码时真的很烦人,每次创建新对象时,调试器都不会直接进入构造函数,而是通过newnew.cpp 中的 CRT 运算符:

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);
        }

有没有办法选择性地阻止特定的函数/类进入,或者我可以通过其他方式避免这种情况?

4

2 回答 2

1

Andy Pennell 的博客文章“如何不使用 Visual C++ 调试器进入函数”提供了大部分答案。我也试图弄清楚这一点,并且通过毅力(或者我猜是反常)我尝试了字母表中的每个字母,直到我被 o.*=nostepinto 击中。

从那以后,注意到在模块窗口中它说 msvcr100d.dll!operator new,引导我尝试“operator new.*”作为正则表达式。

有效!安迪的魔法是“operator new.*=nostepinto”

注意我使用的是 VS 2010,但同样适用于 VS 2008

于 2013-04-04T03:19:34.497 回答
0

Visual Studio 有一个功能,您可以在其中选择要进入的功能。所以如果你有这样的代码:

foo* p = new foo(new baz (new flip()));

您右键单击以显示弹出菜单。从那里选择“步入”,它将为您提供可以步入的功能列表。所以在这里你可以避免所有新的调用,并选择你进入哪个构造函数。

于 2013-04-04T04:23:21.017 回答