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,这里描述了这种解决方法

环境。Win7、VC2013、QtCreator 3.1.1

4

2 回答 2

2

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

如果您不介意重新编译,您始终可以强制在生成的代码中放置一个断点:

#include <intrin.h>

...

__debugbreak();

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

于 2014-08-29T20:05:57.957 回答
1

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

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

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

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

-- 允许用户附加调试器并进行调查、回溯等。

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

d) 允许用户手动恢复程序,就好像什么都没发生一样(除了大延迟)

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

于 2014-08-29T20:44:15.900 回答