Возврат каретки ("\ r") в C / Objective-C в выводе GDB не работает - PullRequest
3 голосов
/ 20 апреля 2011

Я хочу, чтобы вывод в командную строку (до сих пор в командной строке GDB в XCode) перезаписывал эту же строку. Код, который я сейчас использую для печати вывода, берет некоторые вещи из метода Objective-C и в конечном итоге делает это:

unsigned char _output = ...;
printf("Output:%c\r",_output);
fflush(stdout);

Он печатает правильный вывод, но в последовательных строках вместо перезаписи. В чем может быть проблема?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Консоль GDB в Xcode не является полнофункциональной эмуляцией терминала.Он предназначен для поддержки взаимодействия с GDB, и все.То, как обрабатываются управляющие символы, будет зависеть от используемого вами эмулятора терминала.Что происходит, когда вы запускаете инструмент из командной строки напрямую, используя Terminal.app?Что насчет xTerm?rxvt

1 голос
/ 21 апреля 2011

Интерпретация '\ r' и '\ n' зависит от платформы или терминала.Терминалы могут быть настроены на автоматическое добавление перевода строки (0x0a) к «\ r».Кроме того, '\ n' - это newline , что может означать либо одну строку перевода (при условии возврата каретки), либо пару возврата каретки и перевода строки.Для переносимости нельзя рассчитывать на '\ r', чтобы вернуть только каретку (курсор) в начало текущей строки.

Чтобы попасть в начало той же строки, можно поддаться искушению использовать '\ b' (backspace).Но это тоже субъективно.Некоторые устройства вывода интерпретируют команду как деструктивную, некоторые как перемещение назад на один символ, неразрушающие, а другие игнорируют ее.

Я предлагаю вам вместо этого использовать библиотеку позиционирования курсора.Некоторые люди рекомендуют NCurses.

...