Debugging YoctoLinux创建了一个vmlinux,其中包含错误的dwarf调试信息版本(不是2、3、4)

Debugging YoctoLinux创建了一个vmlinux,其中包含错误的dwarf调试信息版本(不是2、3、4),debugging,linux-kernel,gdb,Debugging,Linux Kernel,Gdb,我正在使用Yocto1.8(fido)为通用64位x86构建Linux内核。内核构建、引导和运行。但是,当我尝试使用调试器对其进行调试时,我抛出的所有调试器和工具都会停止,并且无法使用vmlinux文件中的调试信息。我使用应该生成调试信息的设置构建了这个内核,并使用objdump-g查找大量调试信息。那部分对我来说似乎是正确的 gdb投诉: (gdb) symbol-file /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky

我正在使用Yocto1.8(fido)为通用64位x86构建Linux内核。内核构建、引导和运行。但是,当我尝试使用调试器对其进行调试时,我抛出的所有调试器和工具都会停止,并且无法使用vmlinux文件中的调试信息。我使用应该生成调试信息的设置构建了这个内核,并使用objdump-g查找大量调试信息。那部分对我来说似乎是正确的

gdb投诉:

(gdb) symbol-file /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky-linux/linux-yocto/3.14.36+gitAUTOINC+162dfe3bb0_dbe5b52e93-r0/linux-genericx86_64-standard-build/vmlinux  
Reading symbols from /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky-linux/linux-yocto/3.14.36+gitAUTOINC+162dfe3bb0_dbe5b52e93-r0/linux-genericx86_64-standard-build/vmlinux...  
Dwarf Error: wrong version in compilation unit header (is 26213, should be 2, 3, or 4)   
[in module /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky-linux/linux-yocto/3.14.36+gitAUTOINC+162dfe3bb0_dbe5b52e93-r0/linux-genericx86_64-standard-build/vmlinux]  
(no debugging symbols found)...done.  
关键在于,这显然是一个完全破碎的版本:

Dwarf错误:编译单元头中的版本错误(is 26213, 应为2、3或4)

Objdump对什么是坏的有不同的看法:

[jakob@mnshome010-1 linux-genericx86_64-standard-build]$ objdump -g vmlinux | more
objdump: Warning:
vmlinux:     file format elf64-x86-64
Contents of the .debug_aranges section:

Bogus end-of-siblings marker detected at offset 57646c3 in .debug_info section

objdump: Warning: Bogus end-of-siblings marker detected at offset 57646c4 in .debug_info section
objdump: Warning: Bogus end-of-siblings marker detected at offset 57646c5 in .debug_info section
objdump: Warning: Further warnings about bogus end-of-sibling markers suppressed
objdump: Warning: Invalid pointer size (99) in compunit header, using 4 instead
objdump: Warning: Debug info is corrupted, length of CU at 5768ed8 extends beyond end of section (length = 72746c70)
这听起来像是调试信息以多种方式被破坏。或者这可能正是导致gdb首先被抛弃的原因

那么,如何创建一个带有调试信息的vmlinux,从而真正允许调试发生呢


创建此损坏的文件可能会出现什么问题,如何修复

根据记录,这是通过完全删除Yocto构建目录并从头开始设置新构建来解决的:

  • cd..../poky/
  • rm-rf构建/
  • 源oe初始构建环境
在自定义build/conf/bblayers.conf和build/conf/local.conf中复制

重建图像

分析是,在某个地方,我的第一个构建生成了一个二进制文件,其中包含损坏的调试信息。这被链接到内核vmlinux中,使我所有的调试工具都抱怨。不知道是哪个文件,也不知道它是如何损坏的。从头开始重建不是一个非常令人满意的解决方案,但在这种情况下,它确实解决了问题