printf () периодически перестает печатать во время отладки в Xcode 4 - PullRequest
0 голосов
/ 13 марта 2011

Я только что обновился до Xcode 4 и работаю в проекте C ++.Я обнаружил, что printf () периодически не может завершить печать (в середине строки) на консоль Xcode, и оттуда в printf () перестает печатать что-либо - даже если приложение продолжает работать в отладчике.

Я подозреваю, что консольное окно Xcode 4 ошибочно, потому что, если я перенаправлю стандартный вывод в файл, то регистрация, кажется, продолжится без проблем.Тем не менее, если я использую в командной строке следующее:

tail -f log-out.txt

, то иногда отображаются неполные строки.Но это, вероятно, связано с некоторой буферизацией (неполным сбросом), потому что в конечном итоге строки в файле завершены.

Итак, мне интересно, испытал ли кто-нибудь что-то подобное и понял, что вызывает замораживаниев выводе консоли XCode.

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

На самом деле никогда не работал с Xcode, НО:

Можете ли вы показать нам, как выглядят ваши вызовы printf?

Причина, по которой я спрашиваю, заключается в том, что если вы не выполняете сбросВ вашем потоке некоторые результаты могут не доходить до консоли (как вы на самом деле указали в вопросе).Самый простой способ сделать это - добавить символ новой строки в конце каждого вызова printf.

1 голос
/ 19 марта 2011

Такое поведение кажется прерывистым и, как сообщается, уже существует Xcode 4. В качестве обходного пути я сделал что-то подобное с функцией main (). У этого подхода есть некоторые преимущества, когда консоль отладки Xcode работает неправильно.

#define REDIRECT_STDOUT_TO_FILE 1

int main(int argc, char ** argv)
{
#if REDIRECT_STDOUT_TO_FILE //## redirect stdout to "log-out.txt"
    freopen("log-out.txt", "w", stdout);
#endif  //  REDIRECT_STDOUT_TO_FILE

    MyApp app(argc, argv);

    int result = app.Run();

#if REDIRECT_STDOUT_TO_FILE //## redirect stdout to "log-out.txt"
    fflush(stdout);
    fclose(stdout);
#endif  //  REDIRECT_STDOUT_TO_FILE

    return result;
}

Использование tail -f log-out.txt в Терминале позволяет просматривать вывод stdout. Или, если вы используете BBEdit, bbedit --new-window log-out.txt также является работоспособным решением.

Пока что я рассматриваю это как ошибку в XCode - и я буду продолжать пытаться понять, при каких условиях это происходит.

...