模板中的断点被忽略,是否有解决方法?

时间:2014-08-29 19:46:55

标签: c++ qt-creator qt5.3 msvc12

每当我在模板中设置断点时,它都会被忽略。这有解决方法吗? 示例:忽略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 个答案:

答案 0 :(得分:2)

这是由于内联和各种其他优化导致调试器更难以知道代码的地址。

如果您不介意重新编译,可以随时强制将断点放在生成的代码中:

#include <intrin.h>

...

__debugbreak();

资料来源:[http://msdn.microsoft.com/en-us/library/f408b4et.aspx]

答案 1 :(得分:1)

我使用过的解决方法:编写自己的断言。

我有一个断言版本,从boost断言简化,

a)可以显示信息,甚至与断言

无关

b)可以在一个简单的延迟循环中旋转

- 允许用户附加调试器并进行调查,反向跟踪等。

c)只能打印或退出或打印然后退出

d)允许用户手动恢复程序,就像没有发生任何事情一样(除了很大的延迟)

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