在不修改源代码的情况下显示C中的文件名,行号和功能

时间:2015-02-04 09:04:23

标签: c function filenames trace

我是一家新公司,使用的C源代码几乎没有任何跟踪机制。 我想知道应用程序是否通过某个文件以及在哪里(哪个函数)。 我可以使用断点来做到这一点,但是相关的文件包含很多功能。

因此,我正在寻找某种工具,我可以将其附加到应用程序中,并提供以下类型的输出:

  

- Main.c(main_function())

     

---- submain.c(submain_function())

     

...

然后,我可以推断出应用程序传递的位置(哪个文件名,哪个函数)。

有人知道这样的工具是否存在吗? 感谢

2 个答案:

答案 0 :(得分:1)

如果您使用Linux,gdb可能会派上用场。

您可以使用-g-g3选项使用gcc编译代码,然后使用gdb ./<executable_name>运行二进制文件,在任何源中设置所需函数的断点文件和检查电话。

在单步执行应用程序时,它将显示正在执行的指令的文件名和行号。

注意:请详细了解thisthis

答案 1 :(得分:0)

我假设您在Linux上开发。然后你也可以自定义GCC编译器,特别是使用MELT(一种扩展GCC的lispy域特定语言),让编译器在很多地方添加一些日志记录。为此,您需要插入新的GCC&#34;优化&#34;通过做这样的工作,最重要的是,你需要了解有关GCC内部表示的一些细节(Gimple,Tree-s,Basic blocks,...)

但是,这可能需要您工作一周以上的工作。除非你的代码库真的很大(至少50万  线路)可能不值得努力