SIGILL에게있어 .)기본 안드로이드 GDB 원격 디버그
하드웨어 : AM335x 코어 텍스 A8 SOC 기반으로 am335xevm_sk (TI의 dev에 booard)
내가 무엇 :
하드웨어를 부팅 SD 카드를 사용하여 시스템을 구축 할 수 있습니다. 모든 것이 제대로 작동합니다.
ADB는 init.am335xevm.rc 파일을 끌어 rild 서비스를 주석으로 다시 밀어, 대상 시스템을 다시 부팅합니다. 원격 디버그 rild에 크로스 디버거를 사용하기 때문에이 작업을 수행합니다.
원격 디버그 설정 : adb 전달 TCP 포트. ~~~~~~~~~~~~~~~~~
[email protected]:~/devkit/JB422$ PATH=$PATH:/home/ma/devkit/JB422/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin [email protected]:~/devkit/JB422$ arm-linux-androideabi-gdb GNU gdb (GDB) 7.3.1-gg2 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android". For bug reporting instructions, please see: <xxxx://www.gnu.org/software/gdb/bugs/>. (gdb) file /home/ma/devkit/JB422/out/target/product/am335xevm_sk/symbols/system/bin/rild Reading symbols from /home/ma/devkit/JB422/out/target/product/am335xevm_sk/symbols/system/bin/rild...done. (gdb) set sysroot /home/ma/devkit/JB422/out/target/product/am335xevm_sk/symbols (gdb) target remote localhost:2345 Remote debugging using localhost:2345 __dl__start() at bionic/linker/arch/arm/begin.S:35 35 mov r0, sp (gdb) n 36 mov r1, #0 (gdb) n 37 bl __linker_init (gdb) n Program received signal SIGILL, Illegal instruction. 0x4013a89e in __linker_init (elfdata=0xbee7bae0) at bionic/linker/linker.cpp:2030 2030 extern "C" unsigned __linker_init(unsigned **elfdata) { (gdb) c Continuing. Program terminated with signal SIGILL, Illegal instruction. The program no longer exists. (gdb)
:로,
[email protected]:/ # gdbserver localhost:2345 system/bin/rild
Process system/bin/rild created; pid = 829
Listening on port 2345
Remote debugging from host 127.0.0.1
원격 디버그 rild :와 같이 대상 시스템에서 gdbserver 시작 ~~~~~~~~~~
나는 낮은 수준의 툴체인 문제에 익숙하지 않다. 나는 그 문제를 봤는데, 거의 같은 사람들이 같은 문제를 겪은 것으로 보인다.
내가 AOSP 소스 (안드로이드 4.2.2_r1, JDQ39)과 비교 미리 만들어진 툴체인과 NDK 컨텐츠를 다운로드, 통계적으로 유의 한 차이가 발견되지 않았다.또한 최신 NDK (r10b)로 시도했습니다. NDK에서 미리 만들어진 툴체인을 사용하여 전체 대상 시스템을 재구성하고 디버그를 수행하면 결과가 동일합니다.
I는 또한 안드로이드 17 안드로이드 18로 설정 플랫폼 독립형 툴 체인을 생성하고, 상기 단계를 반복하려 결과는 동일하다.또한 NDK 도구 체인을 다시 작성하려고 시도했지만 아무런 차이가 없었습니다.
는 또한 (NDK의 r10b 패키지 prebuilts) 새로운 gdbserver의 버전을 시도하고, 문제가 계속.
~~~~~~~~~~~~~~~~~~~~~~~~~~~
하지만 간단한 인사 세계 프로그램을 디버깅하기 위해 NDK 툴체인을 사용하는 경우 (liblog 동적 링크와 함께),이 페이지에서 제안으로 :
WWW 도트 srombauts는 점 FR/2011/03/06/독립형 - 툴체인/
및 디버그, 내가) (주로 단계 수를 할
, 그러나 프로그램 종료 후에, 목표 시스템의 프로세스는 정상적인 종료 대신 SIGILL 종료와 비슷한 결과를 얻습니다. 많은 많은 개발자가 GDB를 사용하기 때문에 ~~~~~~~~~~~~~~~~~~~~~~~~~~~나는,이 발생하는 이유를 매우 혼란 스러워요 디버그 네이티브 코드와 구글의 플랫폼 개발자도 gdb 디버그에 의존해야합니다. gdb 또는 gdbserver의 버그로 인해 문제가 발생하지는 않습니다.아마 am335x 커널과 관련이 있을까요? 아니면 gdb를 사용하기 위해 중요한 것을 놓쳤는가? 타겟 아키텍처 옵션? 또는 특정 컴파일러 옵션을 이런 종류의 네이티브 디버그에 지정해야합니까? 신중하게 안드로이드에서 원거리 원격 디버그에 대한 온라인 기사를 읽었으며 특별히 지적하고있는 것을 발견하지 못했습니다.
원격 GDB를 사용하여 ril 및 HAL 라이브러리를 래핑하는 다른 테스트 사례를 포함한 일부 원시 프로그램을 디버깅하고 싶습니다. 도와주세요!
안녕하세요. 전문가는 아니지만 어떤 원시 코드를 가져 와서 (라이브러리에 원시 코드를 컴파일 한 다음 Java에서로드하는) 간단한 예제 Android 패키지를 만든 다음 ndk-gdb 명령을 사용하여 디버그하는 것이 좋습니다. , ndk-gdb가하는 것을보기 위해서. 그것은 솔브 경로를 네이티브 라이브러리를 포함하는 경로로 설정하지만 장치에서 일부 라이브러리를 가져 와서 solib 경로에 추가합니다. 나는 디버그가 작동하고 SIGILL이 없으면 ndk-gdb로 디버깅을 시작했다 (물론 adb 루트를 사용한다) – Colin