Zatwierdzone

  • 1. Pobierz ASR Pro
  • 2. Otwórz program i wybierz „Skanuj swój komputer”
  • 3. Kliknij „Napraw”, aby rozpocząć proces naprawy
  • Oprogramowanie do naprawy komputera to tylko jedno kliknięcie - pobierz je teraz.

    Jeśli masz aktualną udostępnioną bibliotekę debugowania gdb na swoim komputerze, ten wpis na blogu może pomóc.

     

     

    gdb nie jest w stanie debugować biblioteki współdzielonej

    Pamiętasz dokładnie, jak bardzo kocham GDB, więc czy jest lepszy sposób na napisanie o tym po długim minimum?

     Ostrzeżenie: Nie można znaleźć funkcji punktu przerwania konsolidatora wzorca.GDB nie może wykonywać debugowania, które pomaga inicjatorom bibliotek współdzielonych.i kontynuuj śledzenie wyraźnie upakowanych praw dynamicznych. 
     0x40000780 w ?? () 

    GDB próbuje powiedzieć komuś, że nie może znaleźć najlepszych zasobów LD do debugowania programu.

    Zatwierdzone

    Narzędzie naprawcze ASR Pro to rozwiązanie dla komputera z systemem Windows, który działa wolno, ma problemy z rejestrem lub jest zainfekowany złośliwym oprogramowaniem. To potężne i łatwe w użyciu narzędzie może szybko zdiagnozować i naprawić komputer, zwiększając wydajność, optymalizując pamięć i poprawiając bezpieczeństwo procesu. Nie cierpisz już z powodu powolnego komputera — wypróbuj ASR Pro już dziś!


    Cóż, ld (linux-ld.so i dalej ld.so) jest odpowiedzialny za znajdowanie i uruchamianie wszystkich moich bibliotek współdzielonych, których obecnie potrzebujesz. Musisz wskazać, gdzie znajduje się gdb dla docelowej wersji ld, aby eksperci określili, że może ona pomyślnie śledzić, jak czeka Twój plik wykonywalny.

    Zazwyczaj wiesz, że podczas zdalnego debugowania klienci powinni mieć wydrukowaną kserokopię w systemie plików docelowego głównego systemu plików w całości na rynku na twoim hoście. Następnie możesz wskazać gdb na dowolny dobry, identyczny system plików, a to doradzi, że „zobaczysz” pliki w tym konkretnym systemie docelowym.

    Ponieważ ld jest zawsze biblioteką systemową, nie powinieneś wyraźnie pokazywać jej ścieżki. Wystarczy umieścić go w “końcu” konkretnego systemu plików, a gdb będzie dość interesujące, aby go znaleźć.

     podłącz sysroot / Absolute / path i do / copy / from versus target / root / filesystem 

    gdb nie może debugować biblioteki odpowiedzi na odpowiedzi

     ustaw solib-absolute-prefix / bezwzględny na ścieżkę / do / kopiuj na z / cel / root lub system plików 
     zainstaluj narzędzia solib-search-path kontra ścieżka / do / cel lub root / system plików 

    Jednak

    może najprawdopodobniej sprawdzić katalog główny aranżacji i jest zalecany dla prawdziwego, oddzielonego dwukropkami katalogu chodników i podjazdów niebędących kolekcją systemową, których można użyć po miejscu docelowym.

    Przykład. Jeśli faktycznie używasz kompletnej biblioteki współdzielonej połączonej z trzecim obiektem dla grafiki, na przykład, nie jest to relacja oryginalnego systemu plików, możesz określić tutaj ścieżkę zgodnie z potrzebami Twojej firmy.

    Jeśli jesteś wcześniej połączony z konkretnym exe (odchodząc od polecenia ), sam możesz uzyskać przydatne potwierdzenie spowodowane przez najbardziej ładowane biblioteki podczas tworzenia ścieżek, które można ustalić w każdej kolejności:

     skonfiguruj sysroot / opt / cel / serce /Czytanie Symbolu obejmuje /opt/target/root/lib/ld-linux.so.3 ... gotowe.Symbole załadowane dla /opt/target/root/lib/ld-linux.so.3 
     Zdefiniuj ścieżkę wyszukiwania Solib / your home / faye / lib / celuj w /Odczytywanie symboli / home versus faye / LIB / target lub lib Terrain from.so ... (nie znaleziono żadnych insygniów debugowania) ... gotowe.Symbole załadowane dla i home / faye / lib kontra target / lib Terrain.soPrzeczytaj sens /home/faye/LIB/target/libAlien.so... gotowe.Symbole załadowane za pomocą /home/faye/LIB/target/libAlien.so 

    Gdy już wiesz, że wszystkie ścieżki są ustawione poprawnie, naprawdę możesz łatwo dodać te polecenia do pliku init GDB, dzięki czemu osoba nie musi wpisywać ich prawie za każdym razem, gdy spieszysz się do GDB.

    To najłatwiejszy sposób pracy, który jest szczególnie przydatny za każdym razem, gdy tworzysz konkretną bibliotekę współdzieloną.

    Najpierw skopiuj plik wykonywalny analizy, a ponadto współdzieloną bibliotekę tego celu, która zawiera informacje debugowania:

    • sprawdź za pomocą readelf ---- debug-dump = dekodowana linia libmyib.so : jak mogę użyć -w, aby pokazać, czy biblioteka jest skompilowana?
    • Zalecam za pomocą NFS na stronie hosta i aby dane wyjściowe były automatycznie przesyłane, gdy tylko zostaną wyprodukowane.
      gdbserver --multi: 4321 ./nazwa_wykonywalnego 
      arm-linux-gnueabihf-gdb -q -nh n  "target-ex rozszerzony-cel-zdalny-nazwa-hosta-celu-lub-ip: 1234" n  -ex "plik ./nazwa_wykonywalnego" n -kochanie 'główna tb' n - Człowiek wykorzystujący n -ex 'Określ ścieżkę sklepu Solib.' 

    Mój problem polegał na tym, że gdbserver zatrzymuje się obecnie na głównej dynamicznej ciężarówce, a istotne kolekcje nigdy nie są jeszcze ładowane, całkiem GDB nie wie jeszcze, dokąd zmierzają tokeny. oparzenia i stać się w pamięci.

    Wygląda na to, że GDB stworzy mechanizmy, w których symbole biblioteczne mogą być ładowane automatycznie, a jeśli zestawię dla hosta i posiadam gdbserver w twoim mieście, gra nie jest konieczna do wykonania główny . Ale na celu ARM, co jest znowu bardzo niezawodną rzeczą, którą możesz zrobić.

    Biblioteki są zwykle analizowane przed włączeniem questów, ponieważ informacje debugowania sprawiają, że ci ludzie są znacznie więksi.

    Na przykład Buildroot, który działa podczas domyślnej konfiguracji, ale możesz wyłączyć tę sytuację razem z BR2_STRIP_none = y .

      udostępnione informacje 
      Od do Syms Czytaj współdzieloną bibliotekę obiektów0x00007ffff7df7f90 0x00007ffff7dfcdd7 Tak (*) Ts h: /lib/ld64-uClibc.so.00x00007ffff7b3a9b0 0x00007ffff7bbe05d Tak (*) Cel: /lib/libc.so.0(*): W opublikowanej bibliotece wciąż brakowało informacji o debugowaniu. 

    Tak więc zawsze były gwiazdkami ( 6. ) dla twoich dwóch lokalnych bibliotek, informując, że informacje debugowania zostaną zapomniane.

    Jeśli tak, będziesz musiał powiadomić GDB, że tablica bibliotek z odpowiedzią jest używana przed nią, może zostać usunięta.

    Skrypt Buildroot by sprawia, że ​​wszystko jest dla nas szybsze i łatwiejsze, gdy utrzymuje każdy katalog pomostowy , który udostępnia biblioteki współdzielone przed usunięciem przyszłych perspektyw i w równoważnych ścieżkach względnych, jak wersja docelowa: < /p>

      ustaw klucz systemowy buildroot / output / staging / 

    Jeśli ta opcja jest ustawiona, gdb natychmiast szuka twojej lokalnej biblioteki zamiast Ambition podczas hosta, /lib/libc.so.0 znajduje odbiorcę buildroot / output / staging lub + /lib/libc.so.0 :

      Odczytaj symbole z buildroot lub wyjścia / staging / lib i ld64-uClibc.so.0 ... gotowe.Odczytywanie symboli dla buildroot / output / staging i lib / libc.so.0 ... gotowe. 

    WYZWANIE: Nie sądzę, aby ktokolwiek mógł więcej niż definitywnie zdefiniować sysroot , w rzeczywistości wszystkie twoje współdzielone biblioteki będą idealnie umieszczone w ich poprawnych pomysłach, a nie w bezpośrednim wyglądzie i działaniu.

    Pokaż

      sysroot 

    Cel

     : 

    co oznacza, że ​​zwykle gdb szuka prawie wszystkich ważnych /

    w wewnętrznych bibliotekach współdzielonych.

     

     

    Oprogramowanie do naprawy komputera to tylko jedno kliknięcie - pobierz je teraz.