如何使用cross gdb检查来自crosstarget机器的核心文件

SKi*_*SKi 7 c linux gdb cross-compiling gdbserver

我有一个core来自嵌入式SH3 linux设备的文件,以及我主机linux中的交叉编译环境(sh3-linux-gdb)的gdb.

但我在使用gdb加载核心文件时遇到问题:

$ sh3-linux-gdb ./myprogram ./core
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
...
This GDB was configured as "--host=i386-pc-linux-gnu --target=sh3-linux"...
GDB can't read core files on this machine.
(gdb)
Run Code Online (Sandbox Code Playgroud)

为什么它无法读取核心文件?有没有办法从目标系统读取核心文件到交叉gdb?

目标机器(SH3-linux)中有gdbserver,但不是gdb本身.我能够用gdbserver和运行目标机器进程的运行时debuging sh3-linux-gdb,所以sh3-linux-gdb应该正确编译.

编辑: 请求readelf转储:

[build]$ sh3-linux-readelf -a core
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              CORE (Core file)
  Machine:                           Renesas / SuperH SH
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          0 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         51
  Size of section headers:           0 (bytes)
  Number of section headers:         0
  Section header string table index: 0

There are no sections in this file.

There are no sections in this file.

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  NOTE           0x000694 0x00000000 0x00000000 0x00200 0x00000     0
  LOAD           0x001000 0x00400000 0x00000000 0x00000 0x01000 R E 0x1000
  ----- several boring lines removed -----
  LOAD           0x05a000 0x29952000 0x00000000 0x01000 0x01000 RW  0x1000
  LOAD           0x05b000 0x7be48000 0x00000000 0x15000 0x15000 RWE 0x1000

There is no dynamic section in this file.

There are no relocations in this file.

There are no unwind sections in this file.

No version information found in this file.

Notes at offset 0x00000694 with length 0x00000200:
  Owner         Data size       Description
  CORE          0x000000a8      NT_PRSTATUS (prstatus structure)
  CORE          0x0000007c      NT_PRPSINFO (prpsinfo structure)
  CORE          0x000000a0      NT_AUXV (auxiliary vector)
[build]$ 
Run Code Online (Sandbox Code Playgroud)

EDIT2:--core选项有同样的问题:

$ sh3-linux-gdb ./myprogram --core=./core 
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i386-pc-linux-gnu --target=sh3-linux"...RUN GDB INIT
GDB can't read core files on this machine.
(gdb)
Run Code Online (Sandbox Code Playgroud)

Dim*_*tri -2

可以不直接使用 gdb 而是使用 gdb 服务器来调试应用程序。您要做的第一件事是在目标系统中调用 gdbserver (您在问题中说过该软件包已安装):

gdbserver AAA.BBB.CCC.DDD:port ./myprogram
Run Code Online (Sandbox Code Playgroud)

假设目标计算机可通过以下 IP 地址访问:AAA.BBB.CCC.DDD:port。完成此操作后,您可以通过指定目标远程服务器在开发计算机中调用 gdb:

   % gdb ./myprogram
   % [...]
   (gdb) target remote AAA.BBB.CCC.DDD:port
Run Code Online (Sandbox Code Playgroud)

请注意,目标远程服务器 IP 地址与 gdbserver 相同。