Debugging 嵌入一个程序';使用GCC for GDB';以后用什么

Debugging 嵌入一个程序';使用GCC for GDB';以后用什么,debugging,gcc,gdb,Debugging,Gcc,Gdb,我已经厌倦了在调试完成之前保持源代码不变。每当我更改代码时,GDB就会开始抱怨: 警告:源文件比可执行文件更新 直到我重新编译它,这不能总是很快完成。我认为,如果能够将程序的源代码包含到二进制文件中,并让GDB使用它而不是它的最新版本,那将是一件非常棒的事情 有人能提出一个方法吗?这已经实现了吗?GCC是开源的,您可以修复它。当然,您可能必须修改LD以正确处理信息,并且您必须修复GDB以使用嵌入式源代码。您将使用非标准格式作为调试信息,因此您可能必须修改操作对象文件的其他工具 所以,可能性是存在

我已经厌倦了在调试完成之前保持源代码不变。每当我更改代码时,GDB就会开始抱怨:

警告:源文件比可执行文件更新

直到我重新编译它,这不能总是很快完成。我认为,如果能够将程序的源代码包含到二进制文件中,并让GDB使用它而不是它的最新版本,那将是一件非常棒的事情


有人能提出一个方法吗?这已经实现了吗?

GCC是开源的,您可以修复它。当然,您可能必须修改LD以正确处理信息,并且您必须修复GDB以使用嵌入式源代码。您将使用非标准格式作为调试信息,因此您可能必须修改操作对象文件的其他工具

所以,可能性是存在的。但是,与世界上其他人一样,更容易做到这一点,并在完成调试之前保留您的源代码。通常,如果需要,可以在多次重建可执行文件的同时保持单个GDB会话的运行。通常,调试代码的当前版本比调试昨天的版本更容易。如果您确实需要调试昨天的版本,那么您需要昨天的代码(您确实有一个好的VCS,不是吗?),这样您就可以看到昨天的代码而不是今天修改的代码的实际错误


我相信你提出了这个问题——这需要一些横向思考才能得出这个想法。做得好!但在实践中,您的建议显然很难实现。

编译代码后,您可以将源代码复制到其他位置

然后,在gdb中,您可以设置gdb查找源代码的目录:
设置目录/your/new/directory


现在,gdb将使用在该目录中找到的源代码,您可以在gdb不注意的情况下更改原始源代码。

当然我没有足够的时间/技能/耐心/需要将其作为一个新功能来实现,但是,我很惊讶它还没有实现。虽然我同意在大多数情况下不应该需要它,但它有时可能有一些用处。例如,我用我的旧二进制文件启动一个调试器,以找出问题所在。我找到了问题的根源,但是,在编写了一半代码并保存之后,GDB会话仅仅因为输入错误就崩溃了。现在,我要么在不借助调试器的情况下修复代码,要么回滚、重建程序、运行GDB并撤消更改@沃维克:至少有两个原因。一个是历史性的:现在可用的丰富资源并不总是可用的,人们认为(可能是正确的)最好不要将可调试代码与实际源代码混为一谈,因为它需要太多的磁盘空间和内存。回到过去,将程序压缩到内存中已经够难的了——更不用说添加额外的调试信息等了。另一个是实用的:人们不会发现要保持相关源代码可用性如此困难,以至于需要按照您的建议投入精力。