gpt4 book ai didi

c++ - 如何在不退出和丢失断点的情况下在 gdb 中重新加载重新编译的二进制文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:56 32 4
gpt4 key购买 nike

根据 this excellent guide应该能够重新编译源文件,并简单地使用“r”让 gdb 开始调试新的、更改的二进制文件。

这似乎也暗示了in the gdb manual通过“如果你的符号文件的修改时间自上次 GDB 读取它的符号以来发生了变化,GDB 会丢弃它的符号表,然后再次读取它。”

我正在尝试在 Ubuntu 16.10 上调试一个简单的单个 .cpp 文件。通过g++ -ggdb -std=c++11 foo.cpp编译后,我可以像往常一样调试。

GNU gdb (Ubuntu 7.11.90.20161005-0ubuntu2) 7.11.90.20161005-git
[...]
(gdb) break main
Breakpoint 1 at 0x2754: file foo.cpp, line 204.
(gdb) r
Starting program: /home/code/foo

Breakpoint 1, main () at foo.cpp:204
(gdb) n
(gdb) k
Kill the program being debugged? (y or n) y

在这里,我对源文件做了一个小改动,然后重新编译。再次尝试运行文件时:

(gdb) r
/home/code/foo' has changed; re-reading symbols.
Error in re-setting breakpoint 1: Cannot access memory at address 0x55555555674b
Starting program: /home/code/598
warning: Probes-based dynamic linker interface failed.
Reverting to original interface.

[Inferior 1 (process 20898) exited normally]

有没有办法在保持断点不变的情况下成功重新加载二进制文件?

编辑:This post有我正在寻找的答案。您使用 file binaryname 命令重新加载可执行文件。

(gdb) file foo
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
A program is being debugged already.
Load new symbol table from "foo"? (y or n) y
Reading symbols from foo...done.
Error in re-setting breakpoint 1: Cannot access memory at address 0x274b
Error in re-setting breakpoint 2: Cannot access memory at address 0x274b

我们看到断点仍然存在,只是被禁用了:

(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep n 0x0000555555556754
breakpoint already hit 1 time
2 breakpoint keep n 0x000055555555677b

因此我们只需启用它们:

(gdb) enable
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000555555556754
breakpoint already hit 1 time
2 breakpoint keep y 0x000055555555677b
(gdb)

这行得通,但我很想听听是否有人有进一步的建议或意见,说明简单地使用 run 是否确实可行。

最佳答案

当我使用 gdb 5 时,重新编译后仅使用“运行”就足以重新加载符号。现在,对于 gdb 8.1,我需要在“运行”之前键入“文件可执行文件”,以强制 gdb 在重新编译后重新加载符号。

关于c++ - 如何在不退出和丢失断点的情况下在 gdb 中重新加载重新编译的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49487977/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com