我想輸出到命令行(到目前爲止,在XCode中的gdb命令行中)以覆蓋同一行。我現在使用打印輸出的代碼從Objective-C的方法需要一些東西,並最終做到這一點:在C/Objective-C中,gdb輸出中的回車符(「 r」)不起作用
unsigned char _output = ...;
printf("Output:%c\r",_output);
fflush(stdout);
它打印正確的輸出,但在連續線,而不是覆蓋。問題是什麼?
我想輸出到命令行(到目前爲止,在XCode中的gdb命令行中)以覆蓋同一行。我現在使用打印輸出的代碼從Objective-C的方法需要一些東西,並最終做到這一點:在C/Objective-C中,gdb輸出中的回車符(「 r」)不起作用
unsigned char _output = ...;
printf("Output:%c\r",_output);
fflush(stdout);
它打印正確的輸出,但在連續線,而不是覆蓋。問題是什麼?
Xcode中的GDB控制檯不是全功能的終端仿真。它旨在支持與GDB的交互,就是這樣。如何處理控制字符取決於您使用的終端仿真器。直接使用Terminal.app從命令行運行該工具會發生什麼?那麼xTerm呢?的rxvt?
是啊,我終於得到它在終端運行(有其他問題是現在已經修復),它在那裏正常工作。你知道是否有辦法讓GDB控制檯按我的需要工作?或者改變XCode調試的工作方式? – 2011-04-20 22:33:03
活動可執行文件的Xcode 3設置包含有關Xcode提供的控制檯類型的一些配置選項。我沒有在Xcode 4中看到這些選項,但那可能是因爲我沒有找到正確的位置。我也懷疑他們中的任何一個都會讓它按照你的意願行事。 – 2011-04-20 22:43:12
'\ r'和'\ n'的解釋取決於平臺或終端。終端可以設置爲自動將換行(0x0a)附加到'\ r'。此外,'\ n'是換行,它可以表示單個換行(假設回車)或回車和換行對。爲了便於攜帶,不能指望'\ r'只將回車(光標)返回到當前行的開頭。
要到同一行的開頭,可能會試圖使用'\ b'(退格鍵)。但這也是主觀的。一些輸出設備將該命令解釋爲破壞性的,一些是向後移動一個字符,而非破壞性的,而其他輸出設備將忽略它。
我建議你改用遊標定位庫。有人推薦NCurses
。
從[這裏](http://www.allegro.cc/forums/thread/605567)它看起來像NCurses可能無法在gdb控制檯或 – 2011-04-20 22:41:41
您可以在輸出之前嘗試'freopen(NULL,「ab」,stdout);''。也許你的庫實現將''\ r''解釋爲'「\ r \ n」'並切換到二進制模式使它做正確的事情。 – pmg 2011-04-20 18:34:18
是的。我認爲這與''\ r''有關,也意味着''\ n'',但'freopen'沒有這樣做。我將不得不花更多時間來嘗試mu的建議。 – 2011-04-20 19:04:08
只是另一個更新,嘗試'printf(「Output \ rTheOutput:%c \ r」,_ output);'在單獨的行上打印「Output」和「TheOutput」。將''\ r''解釋爲'「\ r \ n」'似乎更有可能。 – 2011-04-20 19:32:36