Frage

In meinem Programm Ich brauche Sockets einzurichten und binden sie HTTP-Port (80) zu hören. Das Programm funktioniert gut, wenn ich es von der Kommandozeile mit sudo starten, eskalieren Berechtigungen root. Laufen unter XCode gibt ein auf dem Anruffehler 'Zugriff verweigert' Funktion Bindung (asio :: ip :: tcp :: Akzeptor :: bind ()).

Wie kann ich das Debuggen unter XCode?

Alles in C ++ durchgeführt und Boost.Asio auf Mac OS X 10.5 mit XCode 3.1.2.

War es hilfreich?

Lösung

Aktualisieren : Für Xcode 4.5 und später finden Sie unter diese Antwort statt


Der einzige Weg, mir bewusst bin, zu tun, was Sie fragen, ist Xcode als root ausführen.

>> sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode

Wenn Sie als root ausgeführt wird, etwas Prozesse von Xcode gestartet wird auch als root ausführen. Beachten Sie jedoch, dass, wenn Sie alle Dateien erstellen oder bearbeiten, werden sie im Besitz von root werden, was bedeutet, dass Sie sie werden chown, bevor Sie sie als normalen Benutzer zuerst bearbeiten können.

würde ich einen Weg für Xcode Liebe „Launch Prozess als root“ zu sagen, aber soweit ich weiß, keine solche Funktionalität zur Verfügung steht.

Beachten Sie, dass Sie auch die Anwendung in der Befehlszeile Debugger gdb Ihre Anwendung debuggen ausführen können. Run

>> sudo gdb /path/to/my/application

Dann könnte man Xcode offen hält, nach Belieben zu ändern und zu debuggen Ihrem Programm innerhalb gdb. Dies ist, was ich in der Regel tun.

Bearbeiten : Leser aus der Zukunft: siehe die Antwort von Alexander Stavonin; es spricht darüber, wie dies zu tun. Wenn Sie mit SSH-Schlüssel und ermöglicht es den Benutzer root auf Ihrem System in Ordnung sind, dann seine Antwort ist der Weg zu gehen.

Andere Tipps

In Xcode 4.5 Produkt -> Schema bearbeiten : Suchen Sie in der Info Tab unter Debug-Prozess und wählen Sie die root Option.

Xcode ist in der Lage, die Debugging-Anwendung als root ausführen. Zu diesem Zweck sollten die folgenden Schritte durchgeführt werden:

  1. Aktivieren Sie den Root-Benutzer für die lokale Maschine.

    a. Führen Sie „Verzeichnisdienste“ (/ System / Library / Coreservices / Verzeichnis Utility.app)

    b. Wählen Sie „Enable Root-Benutzer“ aus dem Menü Bearbeiten, und geben Sie das root-Passwort.

  2. Aktivieren Sie Remote-loging.

    a. In den Systemeinstellungen ... -> Teile, überprüft Remote-Anmeldung. Diese Option schaltet den ssh Dämon.

  3. ssh öffentliche / private Schlüssel erstellen und die öffentlichen Schlüssel in den .ssh / authorized_keys Ordnern für Root-Benutzer kopieren.

    a. Öffnen Sie das Terminal auf dem lokalen Rechner und Typ ssh-keygen -t rsa

    b. Akzeptieren Sie die Standardposition und geben Sie das Kennwort für den root.

    c. Melden Sie sich als root su - und erstellen ~ / .ssh-Verzeichnis. (~ == / var / root)

    d. Kopieren Sie den öffentlichen Schlüssel an der Wurzel: cat ~/.ssh/id_rsa.pub | ssh root@localhost "cat - >> ~/.ssh/authorized_keys"

    e. Überprüfen Sie, ob alles in Ordnung ist. Typ ssh root@localhost. Es sollte nicht für das Root-Passwort fragen.

  4. Aktivieren Sie Remote-Debugging via ssh in Xcode.

    a. Wählen Sie «Get Info» aus der Drop-down-Menü auf «Executables».

    b. In den "Debugging" Einstellungen überprüfen «Debug ausführbar remote über ssh» und setzte root @ localhost als «Verbindung mit» info.

  5. Alles sollte in Ordnung sein jetzt ☺

Von Blog

XCode nicht mehr unterstützt Remote-Debugging meisten dieser Antworten Rendering obsolet.

Für ein Programm als root debuggen ist es jetzt einfach. Unter dem Produktnamen im Menü „Edit Schema ...“ verwenden und im „Run“ Schemata „Info“ Fenster wählen Sie „Debug-Prozess als root“. Sie werden einmal authentifizieren.

Wie von Xcode 4.5 ich einen seltsamen Fehler bekam, bis ich ganz Xcode und neu gestartet werden.

Debug als root per SSH.

Bearbeiten Aktive Executable -> Debuggen. -> Debug ausführbar remote über SSH

Wenn Sie einen Web-Server läuft auf Port 443 debuggen wollen, können Sie stattdessen auf Port 8443 auf Ihrem normalen Konto ausgeführt und dann ein tun: sudo ssh user @ localhost -L 443: localhost: 8443 N

Dann können Sie noch Ihre Anwendung auf dem richtigen Port kontaktieren, haben aber den Vorteil, dass die Anwendung als normaler Benutzer ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top