Ich bin unter OSX 10.8.4 und habe GDB 7.5.1 mit Homebrew installiert (Motivation, eine neue GDB mit neuen Funktionen wie --with-Python usw. zu bekommen ...)
Lange Rede, kurzer Sinn, wenn ich ein Debugging in einem C ++ - Eclipse-Projekt ausführe, bekomme ich:
Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Ich habe verschiedene Vorschläge zur Codesignatur befolgt
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- teilweise http://www.noktec.be/archives/1251 mit verschiedenen Anpassungen
So tat ich:
- Richten Sie das Zertifikat ein
- Signieren Sie die gdb -> Codesign -s gdb-cert / usr / local / bin / gdb
Wenn ich das Debuggen in Eclipse erneut ausführe, erhalte ich den gleichen Fehler wie oben "(Bitte überprüfen Sie, ob gdb mit einem Codesign versehen ist - siehe taskgated (8))".
Wenn ich die GDB auf die ältere GDB zurücksetze (in den GDB-Einstellungen von Eclipse) / usr / libexec / gdb / gdb-i386-apple-darwin, wird das Debugging wie erwartet ausgeführt.
Irgendwelche Lösungen / Hinweise da draußen?
Vielen Dank
Pelle
Antworten:
Dieser Fehler tritt auf, weil OSX eine PID-Zugriffsrichtlinie implementiert, für die Binärdateien eine digitale Signatur benötigen, um auf PIDs anderer Prozesse zugreifen zu können. Um den GDB-Zugriff auf andere Prozesse zu ermöglichen, müssen wir zuerst die Binärdatei mit einem Code signieren. Diese Signatur hängt von einem bestimmten Zertifikat ab, das der Benutzer erstellen und beim System registrieren muss.
Öffnen Sie die Anwendung Keychain Access, um ein Codesignaturzertifikat zu erstellen. Wählen Sie das Menü Schlüsselbundzugriff -> Zertifikatassistent -> Zertifikat erstellen…
Wählen Sie einen Namen für das Zertifikat (z. B. gdb-cert), setzen Sie Identity Type auf Self Signed Root, setzen Sie Certificate Type auf Code Signing und wählen Sie die Standardeinstellung Let me override. Klicken Sie mehrmals auf Weiter, bis Sie zum Bildschirm Speicherort für das Zertifikat angeben gelangen, und setzen Sie den Schlüsselbund auf System.
Doppelklicken Sie auf das Zertifikat, öffnen Sie den Abschnitt "Vertrauen" und setzen Sie die Codesignatur auf "Immer vertrauen". Beenden Sie die Anwendung Keychain Access.
Starten Sie den Taskgated-Dienst neu und signieren Sie die Binärdatei.
Quelle http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
Unter macOS 10.12 (Sierra) und höher müssen Sie dies ebenfalls tun
Verwenden Sie gdb 7.12.1 oder höher. Verhindern Sie außerdem, dass gdb eine Shell verwendet, um das zu debuggende Programm zu starten. Sie können den folgenden Befehl in gdb verwenden:
Sie können diesen letzten Befehl auch in eine Datei mit dem Namen .gdbinit in Ihrem Home-Verzeichnis einfügen. In diesem Fall wird er bei jedem Start von gdb automatisch angewendet
QUELLE: https://sourceware.org/gdb/wiki/BuildingOnDarwin
quelle
macOS Sierra
mit selbstsignierten Zertifikaten nicht funktioniert .sudo killall taskgated
ist der Schlüssel zur Lösung meines ProblemsIch habe gdb unter OSX 10.9 zum Laufen gebracht, ohne auf diese Weise zu codieren ( hier beschrieben ):
Installieren Sie gdb mit macports. (Vielleicht können Sie es überspringen)
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
Ändern Sie die Optionszeichenfolge von
-s
in-sp
Zeile 22, Spalte 27.Starten Sie den Computer neu.
Verwenden Sie gdb. Wenn Sie es mit Mac-Ports installiert haben, müssen Sie den
ggdb
Befehl verwenden. Oder haben Sie einen Alias in Ihrer Konfigurationsdatei erstellt:alias gdb='ggdb'
und verwenden Sie dann den Befehl 'gdb'.
quelle
gdb
alssudo
. Das scheint ein unnötiges Sicherheitsrisiko zu sein.Ich habe ein Upgrade auf durchgeführt
gdb 8.3
und konnte die Dinge nicht zum Laufen bringen. Das hat mir geholfen:Wo Inhalt von
gdb.xml
ist:Ich habe diese Lösung hier gefunden: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/
Hinweis: Ohne die Berechtigung konnte ich
gdb
nur mit ausführensudo
.quelle
error: The specified item could not be found in the keychain.
Ich habe das gleiche Problem mit GDB erlebt. Ich laufe unter
Mac OS X 10.8.5
aka Mountain Lion. Ich benutze die GDB-Version7.7.1
.Ich habe mein Testprogramm mit folgendem Befehl kompiliert:
Wenn ich den Befehl eingegeben
gdb sample.out
habe, wird dieselbe kryptische Fehlermeldung angezeigt:Diese Fehlermeldung ist jedoch ein roter Hering.
Die Lösung, die für mich funktioniert hat, bestand darin, GDB einfach mit dem Superuser-Konto aufzurufen:
Das funktioniert gut für mich.
Und von diesem Punkt an konnte ich GDB example.out ausführen, ohne sudo zu verwenden.
Hoffe das hilft und funktioniert für andere. RSVP wenn nicht.
quelle
Nichts davon funktionierte für mich und ich musste auf lange Sicht gehen. Hier ist eine vollständige Liste der Schritte, die ich unternommen habe, um es zum Laufen zu bringen.
Leider gab mir
Unknown Error = -2,147,414,007
das Systemzertifikat, was sehr hilfreich ist, so dass ich eine Problemumgehung durchführen musste.KeyChain Assistant -> Create certificate ->
Wählen Sie
login
,gdb-cert
,Code Signing
Zertifikat in den Systemschlüsselbund kopieren / verschieben (Passwort eingeben)
gdb-cert
) Klicken Sie aufGet info
->Trust Always
startup-with-shell
In Konsole eingeben:
set startup-with-shell off
Konfiguration merken:
echo "set startup-with-shell off" >> ~/. gdbinit
Gehen Sie zu
System Preferences
->Users & Groups
->Unlock it
->Login Options
->Network Account Server
->Join
->Unlock it
->Edit
(Menü) ->Enable Root User
sudo killall taskgated
codesign -fs gdb-cert "$(which gdb)"
PS. Ich benutze am Ende,
lldb
weil es einfach funktioniert ( Tutorial )quelle
Für alle, die Sierra 10.12.6 (und höher) und Homebrew verwenden,
/usr/local/bin/gdb
ist dies ein symbolischer Link zu/usr/local/Cellar/gdb/8.0/bin/gdb
(oder einer anderen Version, z8.0.1
. B. ).Sie müssen sowohl den Link als auch das Ziel codieren:
Oder wenn Sie
greadlink
(installiert überbrew install coreutils
):quelle
Ich frage mich, ob der globale Wandel in der Antwort mit der höchsten Stimmenzahl einige unbeabsichtigte Konsequenzen hat.
Anstatt die alte Tiger-Konvention zu aktivieren, kann mit taskgated signierter Code ausgeführt werden. Daher ist es möglicherweise besser, nur ein signiertes Zertifikat für gdb zu erhalten, ähnlich der Antwort hier .
Danach konnte ich
sudo
gdb verwenden. Wenn Sie gdb ohne sudo verwenden müssen, hilft dieser Link vielleicht , Haftungsausschluss, ich habe es noch nicht ausprobiert, da die Verwendungsudo
vorerst eine gute Lösung ist.quelle
Dies kann nicht verwandt sein. Sie können lldb auf macos anstelle von gdb verwenden. Sie brauchen diesen Aufwand nicht, um gdb zu installieren.
lldb ( http://lldb.llvm.org ) ist in High Sierra bereits standardmäßig installiert
quelle
Ich kann empfehlen, diesem Kern zu folgen: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md
Mit Trick zu überwinden:
unknown error = -2,147,414,007
während der Zertifikatserstellung hier beschrieben: https://apple.stackexchange.com/a/309123Anmerkungen:
Der Pfad für die als
homebrew
Paket installierte GDB sollte ungefähr so lauten:/usr/local/Cellar/gdb/9.2/bin/gdb
Und
csrutil enable --without debug
wird eine Nachricht verursachenrequesting unsupported configuration
, wie hier: https://totalfinder.binaryage.com/system-integrity-protectionPrüfung:
quelle
gdb 8,3;
Mein Problem ist das gleiche wie der Typ oben, gelöst von
quelle