2015-05-25 21 views
5

Próbuję zdalnie debugować czysty program C na urządzeniu z systemem Android. Urządzenie z systemem Android (miejsce docelowe) jest połączone przez USB z komputerem głównym.Zdalne debugowanie czystego programu C z GDB

Co zrobiłem było: Skopiowane z tarczynastępujące pliki: /system/lib, /vendor/lib, /system/bin/app_process i /system/bin/linker.

docelowa:

  • Skopiowane gdbserver z NDK do urządzenia docelowego
  • wysłał exe że chcę debugowania
  • prowadzona serwer gdb na cel za pomocą ./gdbserver :5039 exec
    • to w zasadzie wykonuje proces i otrzymuje pid

Host:

  • włączeniu portu adb forward tcp:5039 tcp:5039
  • prowadzona: arm-eabi-gcc exec.
  • Następnie w gdb:
    • set solib-search-path ..., z bibliotek, które wyciągnąłem wcześniej od celu
    • target remote :5039

arm-eabi-gcc można podłączyć do zdalnego procesu, a nawet dalej (c) wykonanie. Jednak nie mogę ustawić punktów przerwania. Jeśli to zrobię, pojawia się następujący błąd: Cannot access memory at address xxx.

Czy tu czegoś brakuje?

Dziękuję.

+1

Powiązane: [Debug natywna aplikacja Android] (http://stackoverflow.com/q/18143331), [Jak debugować natywny kod za pomocą ndk-gdb] (http://stackoverflow.com/q/17593284), [Dziwny błąd Gdbserver podczas debugowania natywnej aplikacji] (http://stackoverflow.com/q/26317509), [Debugowanie natywnych aplikacji Android NDK] (http://stackoverflow.com/q/8934575), [Debugowanie natywnego kodu w systemie Android Biblioteka] (http://stackoverflow.com/q/12638849), itp. – jww

Odpowiedz

0

Więc, na host, w powłoce gdb, przed określeniem portu docelowego zdalnego, należy wpisać shared. To polecenie ładuje współużytkowane symbole.

Również do kompilacji użyłem -ggdb.

+0

Nie wierzę, że '-ggdb' ma wpływ. Właśnie to ludzie z GDB opowiadali mi kilka lat temu na swojej liście mailingowej. To mogło się zmienić. – jww

+0

emm, więc gdb może wczytać symbole programu debugującego! – Paschalis