Всякий раз, когда я устанавливаю точку останова в шаблоне, она игнорируется. Есть ли обходной путь для этого?
Пример: точка останова на 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
Это вызвано встраиванием и различными другими оптимизациями, которые затрудняют отладчику знать адрес кода.
Если вы не возражаете против перекомпиляции, вы всегда можете принудительно установить точку останова в сгенерированном коде:
#include <intrin.h>
...
__debugbreak();
Источник: [http://msdn.microsoft.com/en-us/library/f408b4et.aspx]
Обходной путь, который я использовал: напиши свой собственный.
У меня есть версия assert, упрощенная от boost assert, что
а) может отображать информацию, даже не связанную с утверждением
б) может вращаться в простой петле задержки
— позволяя пользователю подключить отладчик и исследовать, отслеживать и т. д.
c) может печатать только или выйти или распечатать затем выйти
d) позволяет пользователю вручную возобновить программу, как будто ничего не произошло (кроме большой задержки)
Как для полностью оптимизированных, так и для неоптимизированных, такое утверждение может облегчить ваше бремя.