每当我在模板中设置断点时,它都会被忽略。这有解决方法吗?
示例:忽略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
答案 0 :(得分:2)
这是由于内联和各种其他优化导致调试器更难以知道代码的地址。
如果您不介意重新编译,可以随时强制将断点放在生成的代码中:
#include <intrin.h>
...
__debugbreak();
资料来源:[http://msdn.microsoft.com/en-us/library/f408b4et.aspx]
答案 1 :(得分:1)
我使用过的解决方法:编写自己的断言。
我有一个断言版本,从boost断言简化,
a)可以显示信息,甚至与断言
无关b)可以在一个简单的延迟循环中旋转
- 允许用户附加调试器并进行调查,反向跟踪等。
c)只能打印或退出或打印然后退出
d)允许用户手动恢复程序,就像没有发生任何事情一样(除了很大的延迟)
对于完全优化和未优化,这样的断言可以减轻您的负担。