在我完成调试之前,我已经厌倦了不得不保持我的源代码不变.每次我更改代码时,GDB都会开始抱怨它:
警告:源文件比可执行文件更新.
直到我重新编译它,这不能总是快速完成.我认为,如果有可能将程序的源代码包含在其二进制文件中并使GDB使用它而不是其最新版本,那将会很棒.
任何人都可以建议如何做到这一点?这是否已实施?
源代码嵌入是DWARF v5 中的一项功能。奇怪的是 gcc 11.1 和 gdb 似乎完全缺少支持。不过 Clang 支持它。
clang-13 -gdwarf-5 -gembed-source hello.c -o hello
Run Code Online (Sandbox Code Playgroud)
不幸的是,lldb 似乎还不能使用嵌入的源代码。
GCC 是开源的 - 您可以修复它。当然,您可能必须修改 LD 才能正确处理信息,并且您肯定必须修复 GDB 才能使用嵌入式源代码。您将使用非标准格式来存储调试信息,因此您可能必须修改操作对象文件的其他工具。
所以,可能性是存在的。但是,像世界上其他人一样做同样的事情并保留源代码直到完成调试会更容易。通常,如果需要,您可以在多次重建可执行文件时保持单个 GDB 会话运行。而且,通常情况下,调试当前版本的代码比昨天的版本最容易。如果您确实需要调试昨天的版本,则需要昨天的代码可用(您确实有一个良好的 VCS,不是吗?),这样您就可以看到昨天的代码实际上有什么问题,而不是今天的代码修改版本。
我会赞扬你提出这个问题——需要一些横向思考才能想出这个想法。做得好!但实际上,你的建议实施起来绝对不简单。