2014-08-29 4 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

конв. Win7, VC2013, QtCreator 3.1.1

ответ

2

Это вызвано вложением и различными другими оптимизациями, которые усложняют для отладчика знать адрес кода.

Если вы не возражаете перекомпиляции, вы всегда можете заставить точку останова, чтобы поместить в генерируемый код:

#include <intrin.h> 

... 

__debugbreak(); 

Источник: [http://msdn.microsoft.com/en-us/library/f408b4et.aspx]

+1

поочередно _asm int3; – Nowayz

1

обходной путь я использовал: написать свой собственный утверждать.

У меня есть версия утверждает, упрощенную из бустерных утверждают, что

а) может отображать информацию, даже не связанную с утверждают

б) может вращаться в простом цикле задержки

- позволяет пользователю присоединить отладчик и исследовать, обратную трассировку и т.д.

с) может печатать только или выход или печать затем выйти

d) позволяет пользователю вручную возобновить программу, как будто ничего не произошло (за исключением большой задержки)

Как для полностью оптимизированных, так и для не оптимизированных, такое утверждение может облегчить вашу нагрузку.