如何在 gdb 中加载整个 OVMF UEFI 映像的调试符号?
How to load debug symbols for the whole OVMF UEFI image in gdb?
我正在尝试通过 gdb 在 UEFI 固件 (OVMF) 中调试驱动程序,如下所述:
https://github.com/tianocore/tianocore.github.io/wiki/How-to-debug-OVMF-with-QEMU-using-GDB
它运行良好,但我发现仅仅为我的驱动程序提供调试符号是不够的。我还需要整个 OVMF 图像的调试符号才能正确查看发生了什么。在使用 edk2 构建 OVMF 后,我有很多 .debug 文件,但我不明白我需要将哪些文件加载到 gdb 中,以及我应该使用哪些地址。
我找到了一些涉及 DebugPkg 的说明,但无论如何我都无法使 gdb_uefi.py
工作。总是找不到 EFI_SYSTEM_TABLE_POINTER
.
最后,我最终编写了自己的脚本,该脚本实现了成功加载所有调试符号的 gdb 命令。这可能是一个更糟糕的解决方案,因为它需要一个设置:"debug.log" 执行加载时必须存在驱动程序地址,因此您需要先 运行 QEMU 至少一次。但是,这对我来说已经足够了。
我的脚本可以在这里找到:
我正在尝试通过 gdb 在 UEFI 固件 (OVMF) 中调试驱动程序,如下所述:
https://github.com/tianocore/tianocore.github.io/wiki/How-to-debug-OVMF-with-QEMU-using-GDB
它运行良好,但我发现仅仅为我的驱动程序提供调试符号是不够的。我还需要整个 OVMF 图像的调试符号才能正确查看发生了什么。在使用 edk2 构建 OVMF 后,我有很多 .debug 文件,但我不明白我需要将哪些文件加载到 gdb 中,以及我应该使用哪些地址。
我找到了一些涉及 DebugPkg 的说明,但无论如何我都无法使 gdb_uefi.py
工作。总是找不到 EFI_SYSTEM_TABLE_POINTER
.
最后,我最终编写了自己的脚本,该脚本实现了成功加载所有调试符号的 gdb 命令。这可能是一个更糟糕的解决方案,因为它需要一个设置:"debug.log" 执行加载时必须存在驱动程序地址,因此您需要先 运行 QEMU 至少一次。但是,这对我来说已经足够了。
我的脚本可以在这里找到: