簡體   English   中英

C語言程序中printf()/ fprintf()輸出的調試字符串的縮進(和換行縮進)

[英]Indentation (and wrap-indentation) of debug strings output by printf()/fprintf() in C program

我在函數中使用了printf()使用調試輸出,但是輸出從第1列開始進入控制台。 我想通過在每次進入函數時縮進它們的輸出字符串來區分函數的嵌套級別(該實現很容易實現,具有static int indentlevel;變量在函數的開頭增加,用作空格,填充計數並在末尾遞減)。 但是缺點是,一旦輸出線太長而無法在控制台邊緣處纏繞,則這些行的纏繞部分將從控制台的第1列開始。 我應該注意這一點,因為一旦將輸出重定向到文件,行就是一行的長度,而行的寬度僅取決於文本文件查看器的設置?

如果使用的是gcc,則可以使用-finstrument-functions編譯器選項來導致在每個函數的入口和出口處調用檢測函數。

      void __cyg_profile_func_enter (void *this_fn,
                                     void *call_site);
      void __cyg_profile_func_exit  (void *this_fn,
                                     void *call_site);

您可以定義這些函數來跟蹤嵌套級別。

警告:我實際上還沒有嘗試過(但還有另一件事我還沒有完全解決!)。 一個明顯的GOTHCA-不要檢測儀器功能!!!

http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Code-Gen-Options.html

由於您正在寫入文本文件,因此您不應該考慮換行並讓文本查看器決定。

我使用的一種方法是編寫HTML-然后瀏覽器負責換行。 唯一的難題是,您需要注意open / end標簽已正確平衡,但是您的indentlevel變量也需indentlevel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM