Moja aplikacja działa poprawnie, ale gdb nie może jej debugować z następującym błędem
(gdb) run
Starting program: /path/to/app
Unable to find Mach task port for process-id 83767: (os/kern) failure (0x5).
Jestem na OS X Lion. Wersja GDB to
$ gdb --version
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012)
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 "x86_64-apple-darwin".
Odpowiedzi:
W systemie Snow Leopard i późniejszych wersjach systemu Mac OS nie wystarczy kodować
gdb
pliku wykonywalnego.Aby to działało, musisz postępować zgodnie z tym przewodnikiem: http://www.opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt
Przewodnik wyjaśnia, jak to zrobić
lldb
, ale proces jest dokładnie taki sam dlagdb
.źródło
sudo security add-trust
robi linia? Czy mogę teraz usunąć.cer
plik z mojego pulpitu?codesign -s gdb_codesign `which gdb`
pomaga po tym przewodnikusudo codesign -s gdb_codesign `which gdb-apple`
na macOS Sierra.Działa, gdy się zmieniam na
sudo gdb executableFileName
! :)źródło
gdb
jako root? Byłem po prostu ciekawy, ponieważ to tylko debugger.rm -rf /
lub coś podobnego destrukcyjnego, polegającego na nadpisaniu niektórych konfiguracji / plików binarnych, na których opiera się Twój komputer, aby uruchomić i działać normalnie.Musisz utworzyć certyfikat i podpisać gdb:
Wreszcie możesz podpisać gdb:
sudo codesign -s gdb-cert /usr/local/bin/ggdb
sudo ggdb ./myprog
źródło
Problem polega na tym, że nie jesteś zalogowany jako użytkownik root (czego nie chcesz). Aby uzyskać dostęp do gdb, musisz utworzyć certyfikat. Postępuj zgodnie z tym samouczkiem i powinieneś być gotowy ...
http://sourceware.org/gdb/wiki/BuildingOnDarwin
Jeśli wszystko inne zawiedzie, po prostu użyj:
sudo gdb executableFileName
źródło
codesign -s gdb-cert $(which gdb)
aby podpisaćgdb
aplikację.Ten link miał najbardziej przejrzysty i najbardziej szczegółowy krok po kroku, aby ten błąd zniknął dla mnie.
W moim przypadku musiałem mieć klucz jako klucz „systemowy”, w przeciwnym razie nie zadziałał (o czym nie każdy adres URL wspomina).
Zabijanie
taskgated
jest również realną (i szybszą) alternatywą dla konieczności ponownego uruchamiania.Odinstalowałem również MacPorts, zanim zacząłem ten proces, i odinstalowałem obecny GDB przy użyciu
brew uninstall gdb
.źródło
brew
.Potrzebowałem tego polecenia, aby działało na El Capitan:
źródło
Postępowałem zgodnie z tym samouczkiem i wszystko jest w porządku.
źródło
W systemie MacOSX lldb musi być podpisany kodem. Kompilacje debugowania i wydania są ustawione na podpisywanie kodu przy użyciu certyfikatu podpisującego kod o nazwie lldb_codesign.
[Uwaga: - lldb jest używany w mac jako gdb.]
źródło
Oto naprawdę przydatny przewodnik, który rozwiązał mój problem (OSX 10.13.6).
codesign -fs gdbc /usr/local/bin/gdb
w terminalu: prosi o hasło rootaźródło
Te instrukcje działają na OSX High Sierra i unikają uruchamiania gdb jako root (fuj!). Niedawno zaktualizowałem z OSX 10.13.2 do 10.3.3. Myślę, że to wtedy, gdy gdb 8.0.1 (zainstalowany w / homebrew) zaczął mi zawodzić.
Miałem trudności z poleceniami innych osób. Po różnych instrukcjach wszystko się pogmatwało. Więc zacząłem od nowa. Mniej więcej postępowałem zgodnie z tymi instrukcjami .
Oczyść bałagan:
brew uninstall --force gdb # This deletes _all_ versions of gdb on the machine
Applications
->Utilities
->Keychain Access
usunąłem wszystkie poprzednie certyfikaty i klucze gdb (upewnij się, że wiesz, co tu robisz!). Nie jest jasne, czy jest to konieczne, ale ponieważ popełniłem błąd, próbując utworzyć te certyfikaty i klucze przy użyciu innych instrukcji, i tak je wyeliminowałem. Miałem klucze i certyfikaty zarówno w logowaniu, jak iw systemie.Teraz ponownie zainstaluj gdb.
brew install gdb
Keychain Access
przejdź do menuKeychain Access
->Certificate Assistant
->Create a Certificate
Na drugiej stronie Informacje o certyfikacie wszystkie pola z wyjątkiem tych już wypełnionych pozostawiłem puste.
Na stronie Informacje o parach kluczy zostawiłem wartości domyślne
Na stronie rozszerzenia podstawowych ograniczeń nic nie zostało zaznaczone (domyślnie).
Na stronie Subject Alternate Name Extension zostawiłem domyślne zaznaczone i nie dodałem nic więcej.
Kliknąłem Utwórz i zostałem poproszony o podanie hasła.
Po powrocie do
Keychain Access
aplikacji przeszedłem doSystem
i kliknąłem prawym przyciskiem myszygdb-cert
iw menu rozwijanymTrust
zmieniłem wszystkie pola naAlways Trust
.Zrestartowany komputer.
Na terminalu pobiegłem
codesign -s gdb-cert /usr/local/bin/gdb
. Po wyświetleniu monitu wprowadziłem hasło.Na terminalu pobiegłem
echo "set startup-with-shell off" >> ~/.gdbinit
Uruchomiłem,
gdb myprogram
a następniestart
w konsoli gdb. Tutaj, jak sądzę, poprosił mnie o podanie hasła. Po tym, przy wszystkich kolejnych uruchomieniach, nie pytał o moje hasło.źródło
To dziwne podejście, ale zadziałało dla mnie (MacOs HighSierra 10.13.3). Zainstaluj CLion. Pochodzi z gdb. Po uruchomieniu gdb za pomocą terminala. Skopiuj program gdb do swojego usr / local / bin /. Nie ma problemu z logowaniem, sudo itp.
źródło
Postępowanie zgodnie z instrukcjami tutaj Codesign gdb w systemie macOS wydawało się rozwiązać ten problem, dla mnie, w systemie macOS High Sierra (10.13.3).
źródło