Создатель QT не может читать из стандартного интерфейса в отладчике

#c #c #qt #debugging

#c #c #qt #отладка

Вопрос:

Я только что обновил QT Creator до 4.13.0, и теперь я не могу читать из stdin, находясь в отладчике.

Несколько деталей…

  • Я работаю на macOS.
  • Я пишу C , но использую библиотеку C stdio. (по историческим причинам)
  • Я использую clang 15.5.0 в режиме c 11.
  • Я использую опцию отладчика «Запуск с терминала».

Проблема: введите, как я мог бы, когда мой код переходит в fgets , он никогда не возвращается.

Упрощенный пример:

 #include <stdio.h>

int main()
{
    char buf[1024];
    if (fgets(buf,1024, stdin)) // In debugger, this call never returns!
    {
        fprintf(stderr, "%s", buf);
    }

    return 0;
}
  

Примечание: Когда я запускаю это вне отладчика — никаких проблем.

Кто-нибудь сталкивался с этим и исправлял это? Есть идеи о том, как это исправить?

Комментарии:

1. Это не относится к «запуску в терминале» в Ubuntu, поэтому проблема, по-видимому, связана с конкретной консольной интеграцией с Qt Creator.

2. В поисках обходных путей я переустановил QTC 4.13, и проблема не устранена. Я также установил на виртуальных машинах Windows и Linux. Никаких проблем нет.

3. Нашли обходной путь. Вместо того, чтобы запускать программу из QTC, я запускаю из командной строки и использую опцию меню Debug, чтобы «Прикрепить к запущенному приложению» или «Прикрепить к неустановленному приложению».

4. Не могли бы вы опубликовать ошибку в Qt company? Я делал это всего пару раз, когда имел учетную запись компании, но считаю, что отдельные люди тоже могут это сделать: bugreports.qt.io/secure/Dashboard.jspa

5. На самом деле… Я сделал это сегодня утром.

Ответ №1:

Может быть проблема с приложением запуска терминала openTerminal.py внутри QtCreator.

У меня была аналогичная проблема, когда вывод моего консольного приложения отображался корректно в сеансе терминала при запуске в режиме отладки без отладчика, но при запуске с помощью отладчика весь системный вывод и системная ошибка записывались в виджет вывода приложения, что делало невозможным чтение каких-либо значений из std::in.

Решение было: управление наборами: система среды заменяет длинный путь «… /openTerminal.py » с помощью «/Applications/ Utilities/Terminal.app»

Комментарии:

1. это дает мне Cannot start the terminal emulator "/Applications/Utilities/Terminal.app", change the setting in the Environment options. (на Каталине 10.15.7)