2014-08-29 66 views
1

每當我在模板中設置斷點時,它都會被忽略。有沒有解決方法? 示例:忽略if (list.size() ..的斷點。模板中的斷點被忽略,是否有解決方法?

template <typename ObjectType, typename ContainerType> 
ContainerType CListModelBase<ObjectType, ContainerType>:: 
        sortListByColumn(const ContainerType &list, int column, 
            Qt::SortOrder order) 
{ 
    if (list.size() < 2) return list; // nothing to do 
    // ... 
} 

PS:對於GDB這種解決辦法被描述here

的Env。 Win7,VC2013,QtCreator 3.1.1

回答

2

這是內聯和各種其他優化導致調試器難以知道代碼地址的原因。

如果你不介意重新編譯,你總是可以迫使一個破發點被放置在生成的代碼:

#include <intrin.h> 

... 

__debugbreak(); 

來源:http://msdn.microsoft.com/en-us/library/f408b4et.aspx]

+1

_asm int3; – Nowayz 2014-08-29 20:30:05

1

一個解決方法我都用過:寫你自己斷言。

我有一個版本斷言的,從增壓斷言簡化,即

a)的顯示信息,甚至無關的斷言

b)中能夠以簡單的延遲循環旋

- 允許用戶附加調試和調查,反跟蹤等

C)只能打印或退出或打印然後退出

d)允許用戶手動恢復程序,就好像什麼也沒發生一樣(除了很大的延遲)

對於完全優化和未優化,這樣的斷言可以減輕你的負擔。