我可以使用 gdb 编辑代码行吗?是否也可以在同一个调试会话中保存到实际的源文件和头文件? linux

can I edit lines of code using gdb and is it also possible to save to actual source file and header file while in same debug session? linux

我有一个名为 parser 的程序,我用 -g 标记编译,这是我的 makefile

parser: header.h parser.c
    gcc -g header.h parser.c -o parser

clean:
    rm -f parser a.out

parser.c 中一个函数的代码是

int _find(char *html , struct html_tag **obj)
{
  char temp[strlen("<end")+1];
  memcpy(temp,"<end",strlen("<end")+1);
  ...
  ...
  .
  return 0;

}

我在调试解析器或其他东西时喜欢看到的是,我还可以在遇到断点后和 n 通过上述函数的代码时更改代码行。如果它不是 gdb 的工作,那么是否有任何开源解决方案来实际更改代码和可能的保存,所以当我 运行 通过代码中的下一个语句然后在执行 n (possible different index of array) 之前更改语句将执行,有没有开源工具或者可以在gdb中完成我需要做一些编译选项吗?

我知道我可以在 运行 时间在 gdb 中为变量赋值,但这是吗?好像有什么东西可以改变 soure

大多数 C 实现都是编译的。源代码被分析并翻译成处理器指令。这种翻译很难分段进行。也就是说,给定源代码中的一些小更改,实际上不可能更新可执行文件来表示这些更改。作为翻译的一部分,编译器转换和交织语句,分配处理器寄存器用于计算部分表达式,指定内存中的位置来保存数据,等等。当源代码发生轻微变化时,这可能会导致新的编译发生在一个地方使用不同的寄存器,或者在特定函数中需要更多或更少的内存,从而导致数据来回移动。将这些更改合并到 运行 程序中需要找出所有差异、移动内存中的内容、重新排列处理器寄存器中的内容,等等。出于实际目的,这些更改是不可能的。

GDB 不支持这个。

(Apple 的开发者工具可能有这样的功能。我看到它针对 Swift 编程语言进行了演示,但没有使用它。)