在C程序中由printf()/ fprintf()输出的调试字符串的缩进(和换行缩进)

时间:2011-01-08 08:44:22

标签: c string printf

我在我的函数中使用printf()调试输出,但输出从第1列开始进入控制台。我想通过在每次进入函数时缩进它们的输出字符串来区分函数的嵌套级别(它很容易实现static int indentlevel;变量,它在函数的开头递增,用作空格-filler-count并在最后递减)。但缺点是,一旦输出线变得太长而无法包裹在控制台边缘,线条的包裹部分就从控制台的第1列开始。我是否应该注意这一点,因为一旦输出被重定向到文件,行就是一行长度,行的宽度只取决于文本文件查看器的设置?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

由于您正在写入文本文件,因此您不应该处理换行并让文本查看器决定。

我使用的方法是写入HTML - 然后浏览器负责换行。唯一的问题是您需要注意开放/结束标记是否正确平衡,但您还需要indentlevel变量。