2014-08-29 70 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)允许用户手动恢复程序,就好像什么也没发生一样(除了很大的延迟)

对于完全优化和未优化,这样的断言可以减轻你的负担。