Qt Creator не останавливается на точке останова в шаблонном коде с несколькими экземплярами - PullRequest
0 голосов
/ 12 июля 2020

Я столкнулся с проблемой в 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. Это ошибка, можно ли воспроизвести ее в достаточно современных версиях? Существуют ли какие-либо настройки, которые могут вызвать такое поведение?

...