在不修改源代码的情况下在 C 中显示文件名、行号和函数

display filename, line number and function in C without modifying the source code

我是新来的公司,使用几乎没有任何跟踪机制的C 源代码。 我想知道应用程序是否通过某个文件以及在哪里(哪个函数)。 我可以使用断点来执行此操作,但相关文件包含大量函数。

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

-- Main.c (main_function())

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

...

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

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

如果你在 linux,gdb 可能会派上用场。

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

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

注意:请查看this and this以获得详细了解。

我假设你在 Linux 上开发。然后您还可以自定义 GCC compiler, in particular using MELT(一种用于扩展 GCC 的 lispy 域特定语言),让编译器在许多地方添加一些日志记录。为此,您需要插入一个新的 GCC "optimization" pass 来完成这样的工作,最重要的是,您需要了解有关 GCC 内部表示的一些细节(Gimple、Tree-s、Basic 块,.. .)

但是,这可能需要您花费一周以上的时间。除非你的代码库真的很大(至少有 50 万 行)可能不值得付出努力