2013-03-19 89 views
1

逐步執行代碼,每次創建新的對象時,這真的很煩人,調試器不直接去構造函數,但通過CRT new運營商new.cpp:停止VC++調試步入運營商新

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

當你用/ MT構建時,這是不可避免的,你的程序調用新的,新的構造函數。只需在要調試的構造函數上設置斷點即可。調試+ StepOut快速修復步進響應。 – 2013-03-19 13:01:25

+0

如果我正在逐步完成一個函數,那麼該函數可能會構造對象,並且我想運行ctor邏輯......但是必須始終按SHIFT + F11纔會令人生氣。這不是世界末日,只是一種痛苦:) – 2013-03-19 13:42:18

回答

1

Andy Pennell的博客條目「How to Not Step Into Functions using the Visual C++ Debugger」提供了大部分答案。我試圖弄明白這一點,並通過毅力(或猜測我猜)我嘗試了字母表中的每個字母,直到我碰到了o。* = nostepinto。

從這個,注意到在Modules窗口中,它說msvcr100d.dll!操作符new,導致我嘗試使用「operator new。*」作爲正則表達式。

它的工作!安迪的魔術如何成爲「運營商新的。* = nostepinto」

n.b.我使用的是VS 2010,但VS 2008上的工作方式也一樣。

0

Visual Studio有一個功能,您可以選擇要插入哪個功能。 所以,如果你有這樣的代碼:

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

你點擊右鍵彈出彈出菜單。從那裏選擇「步入」,它會給你一個你可以進入的功能列表。所以在這裏你可以避開所有新的調用,並且可以選擇你所進入的構造函數。