Точка останова в шаблоне игнорируется, есть ли обходной путь?

Всякий раз, когда я устанавливаю точку останова в шаблоне, она игнорируется. Есть ли обходной путь для этого? Пример: точка останова на 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

2 ответа

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

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

#include <intrin.h>

...

__debugbreak();

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

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

У меня есть версия assert, упрощенная от boost assert, что

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

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

- разрешить пользователю подключить отладчик и исследовать, отслеживать и т. д.

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

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

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

Другие вопросы по тегам