문제

X86_64 SUSE Linux에서 32 비트 응용 프로그램을 원격 디버깅하려고했지만이 "원격 레지스터가 잘못 형식화 된"오류를 가져옵니다.

나는 포트 12345에서 듣는 것으로 gdbserver를 시작합니다 (gdbserver localhost : 12345 my_prog)

그리고 이것은 오류입니다.

$ gdb
GNU gdb 6.6
Copyright (C) 2006 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 "x86_64-suse-linux".
(gdb) target remote <ip>:12345
Remote debugging using <ip>:12345
Remote register badly formatted: T0506:0000000000000000;07:80b8bcff00000000;10:4028f0f700000000;
here: 0000000;07:80b8bcff00000000;10:4028f0f700000000;
(gdb)

디버그 서버 시스템 (Uname -a)입니다.

Linux Server 2.6.16.60-0.31-SMP #1 SMP TUE OCT 7 16:16:29 UTC 2008 X86_64 X86_64 X86_64 GNU/LINUX

그리고 이것은 디버그 클라이언트 컴퓨터 (Uname -a)입니다.

Linux 클라이언트 2.6.16.54-0.2.5-Default #1 월 1 월 21 일 13:29:51 UTC 2008 X86_64 X86_64 X86_64 GNU/LINUX

두 머신은 가상 머신 (VMware)에서 실행 중입니다. GDBSERVER 바이너리는 클라이언트 시스템에서 서버 시스템으로 복사됩니다.

(디버그 서버의 런타임 환경이 생산과 유사하며 개발 도구, 소스 코드에 대한 액세스 등이 포함되어 있지 않기 때문에 원격 디버그).

모든 제안을 환영합니다.

업데이트: 이것은 GDB에서 다음 명령을 발행함으로써 나에게 효과가있었습니다.

세트 아키텍처 i386 : x86-64

도움이 되었습니까?

해결책

아마도 당신은 같은 것을 실행해야 할 것입니다 set architecture i386 ~에서 (gdb) 즉각적인? 무엇을 하는가 show architecture 원격 대상에 연결 한 후에?

다른 팁

64 비트 GDB는 32 및 64 비트 열등 프로세스를 직접 디버깅 할 수 있습니다 (이것을 멀티 아키 지원이라고 생각합니다).

그렇지 않습니다 gdbserver: Multi-Arch 디버깅을 지원하지 않습니다.

당신은 필요합니다 gdbserver 그것은 대상 아키텍처와 일치합니다 gdb 그것은 일치합니다 gdbserver. 소스에서 빌드하고 구성하십시오 --target=i686.

어쩌면 당신은 이미 이것을 확인했지만 여기에 간다 :-64 비트 기계에는 32 비트 라이브러리 (LIBC 등)가 있습니까? - "-nx"(초기화 파일 없음) 스위치로 GDB를 실행해 보셨습니까?

1) 대상 기계와 호스트 머신 (케이스에서 대상 기계에 맞는 호스트 머신에 적합한 gdbserver가 필요합니다.

x86 호스트에서 PPC 대상을 디버그하고 싶다고 가정 해 봅시다.

내 목표물에 PPC 실행 파일 GDBSERVER가 필요합니다.

PowerPC 용 x86 실행 파일 GDB가 호스트에 필요합니다.

공유 LIB를 사용하는 경우 대상에 연결하기 전에 호스트 GDB에서 다음을 수행해야합니다.

SOLIB-ABSOLUTE-PREFIX $ ELDK_PREFIX/ELDK-4.2-PPC_4XX/$ CROSS_COMPILE을 설정하십시오

dir $ eldk_prefix/eldk-4.2-ppc_4xx/$ cross_compile

그렇지 않으면 호스트 GDB는 X86에 공유 된 LIB를로드하려고 시도합니다.

대상 프로그램 사본으로 호스트 컴퓨터에서 GDB를 실행해야한다고 생각합니다. 즉, 달리면 gdbserver myprog 대상 기계에서는 복사해야합니다. myprog 호스트 머신에 그리고 실행 gdb myprog.

이런 식으로 호스트 머신의 GDB는 실행 파일에서 아키텍처를 자동으로 선택합니다. 이와 같이 호스트에서 GDB를 실행하면 고정되지 않은 기호 (물음표)가없는 기호가로드됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top