Я столкнулся с проблемой в Qt Creator, которая выглядит как ошибка, но перед отправкой билета я sh собираю дополнительную информацию: воспроизводимость, известность (возможно, уже есть исправления) и т. Д. c.
Я использую Qt Creator 4.11.0 на основе Qt 5.14.0 (MSV C 2017). Если я добавляю точку останова в код шаблона, который имеет несколько экземпляров, по умолчанию эта точка останова никогда не срабатывает. Давайте создадим простое приложение (например, консольное приложение), определим временную функцию и добавим в нее точку останова:
template<typename T>
T func(T val)
{
return val * 2; // Put a breakpoint here
}
int main(int argc, char *argv[])
{
QCoreApplication(argc, argv);
func(1);
return a.exec();
}
Реализация функции не имеет значения, важно то, что у нас есть только один экземпляр func<int>
. Все работает так, как ожидалось, но если мы добавим еще один экземпляр, что-то изменится:
template<typename T>
T func(T val)
{
return val * 2; // Put a breakpoint here
}
int main(int argc, char *argv[])
{
QCoreApplication(argc, argv);
func(1);
func(1L);
return a.exec();
}
Теперь у нас есть func<int>
и func<long>
, и это отражено в Breakpoints View (Qt Creator теперь расширяет точку останова на 2 дочерних элемента, каждый из которых идентифицирует созданную функцию). Теперь ни один экземпляр точки останова не запускается!
Интересно, но если мы добавим еще одну точку останова где-нибудь перед вызовом func<T>
(в коде без шаблона), отладчик остановится на всех трех точках останова. Похоже, ему нужна некоторая инициализация, которая выполняется при первой остановке.
Это очень раздражает, так как мне приходится добавлять точку останова к main
каждый раз, когда я планирую отслеживать свой код. Я никогда не сталкивался с этой проблемой в устаревшей версии Qt Creator 3.5.1. Это ошибка, можно ли воспроизвести ее в достаточно современных версиях? Существуют ли какие-либо настройки, которые могут вызвать такое поведение?