2009-06-23 9 views
24

Nel mio programma ho bisogno di creare socket e collegarli per ascoltare la porta HTTP (80). Il programma funziona bene quando lo avvio dalla riga di comando con sudo, aumentando le autorizzazioni di root. L'esecuzione in XCode restituisce un errore di "autorizzazione negata" sulla chiamata alla funzione di collegamento (asio :: ip :: tcp :: acceptor :: bind()).Debug in XCode come root

Come posso eseguire il debug in XCode?

Tutto fatto in C++ e boost.asio su Mac OS X 10.5 con XCode 3.1.2.

risposta

23

Aggiornamento: per Xcode 4.5 e versioni successive, vedere this answer invece.


L'unico modo Sono consapevole di fare quello che stai chiedendo è quello di eseguire Xcode come root.

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

Una volta eseguito come root, tutti i processi avviati da Xcode verranno eseguiti come root. Si noti, tuttavia, che se si creano o si modificano file, questi saranno di proprietà di root, il che significa che sarà necessario disporre di chown prima di poterli modificare come utente normale.

Mi piacerebbe un modo per Xcode per dire "Avvia processo come root", ma per quanto ne so, nessuna di queste funzionalità è disponibile.

Si noti che è anche possibile eseguire l'applicazione all'interno del debugger da riga di comando gdb per eseguire il debug dell'applicazione. Eseguire

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

allora si potrebbe tenere Xcode aperto, modificare a piacimento, e mettere a punto il programma all'interno di gdb. Questo è quello che generalmente faccio.

EDIT: Lettori dal futuro: vedere la risposta di Alexander Stavonin; parla di come farlo. Se stai bene con le chiavi ssh e abilitando l'utente root sul tuo sistema, la sua risposta è la strada da percorrere.

+0

Grazie, ma questo problema con il proprietario dei file è davvero fastidioso. – Anton

+0

Sfortunatamente il metodo di Alexander non sembra funzionare con XCode4, quindi il metodo sudo in questa risposta sembra essere l'unico che funziona. – JosephH

0

Debug come root tramite SSH.

Modifica Eseguibile attivo -> Debug -> Esegui il debug eseguibile in remoto tramite SSH.

+0

Non riesco a farlo funzionare. Cosa ho impostato in questa pagina: Quando si utilizza "GDB" Utilizzare "Pipe" per input/output standard, "Controllato" Eseguire il debug eseguibile da remoto tramite SSH, Connettersi a: "[email protected]", "Deselezionato" Avviare eseguibile dopo debugger iniziale. E quando eseguo la mia app mostra una finestra di dialogo con autenticazione SSH ma inserendo la mia password come passphrase restituisce "Autenticazione fallita". Ho anche provato a usare il mio nome utente ma non funziona anche. E, a proposito, l'app non parte affatto. Cosa sto sbagliando? – Anton

13

Xcode è in grado di eseguire l'applicazione di debug come root. A tale scopo, è necessario eseguire le seguenti operazioni:

  1. Abilitare l'utente root per la macchina locale.

    a. Esegui "Utility Directory" (/ Sistema/Libreria/CoreServices/Directory Utility.app)

    b. Scegli "Abilita utente root" dal menu Modifica e inserisci la password di root.

  2. Abilita la registrazione remota.

    a. In Preferenze di Sistema ... -> Condivisione, controlla Accesso remoto. Questa opzione attiva il demone ssh.

  3. Creare chiavi ssh pubblico/privato e copiare la chiave pubblica nella cartella .ssh/authorized_keys per l'utente root.

    a.Aprire il terminale sulla macchina locale e digitare ssh-keygen -t rsa

    b. Accetta la posizione predefinita e digita la password per la root.

    c. Accedi come root su - e crea la directory ~/.ssh. (~ ==/var/root)

    d. Copia la chiave pubblica nella radice: cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

    e. Controlla se tutto è ok. Digitare ssh [email protected]. Non dovrebbe chiedere la password di root.

  4. Abilita il debug remoto tramite ssh in Xcode.

    a. Seleziona «Ottieni informazioni» dal menu a discesa su «Eseguibili».

    b. Nelle impostazioni di "Debug", seleziona "Esegui debug eseguibile da remoto tramite ssh" e inserisci root @ localhost come "Connetti a".

  5. Tutto dovrebbe essere Ok ora ☺

From blog

+0

Sembra che non riesca a trovare «eseguibile di debug in remoto tramite ssh» su Xcode4. È? –

+0

Purtroppo, non lo so. In questo momento la soluzione migliore per me è GBD in caso di debug di root. –

0

Se si desidera eseguire il debug di un server web in esecuzione sulla porta 443, si potrebbe invece funzionare sulla porta 8443 sul vostro account normale e poi a: utente sudo ssh @ localhost -L 443: localhost: 8443 -N

Quindi è ancora possibile contattare l'applicazione sulla porta destra, ma avere il vantaggio di eseguire l'applicazione come utente normale.

2

XCode non supporta più il debug remoto rendendo la maggior parte di queste risposte obsolete.

Per eseguire il debug di un programma come root è ora semplice. Sotto il menu Prodotto, usa "Modifica schema ..." e nel riquadro "Informazioni" schemi "Esegui", seleziona "Processo di debug come root". Dovrai autenticarti una volta.

A partire da Xcode 4.5 ho ricevuto uno strano errore fino a quando non ho eseguito Xcode e riavviato.

21

in Xcode 4.5 prodotto ->Modifica schema: Cercare nella scheda Info sotto processo di debug Come e scegliere l'opzione radice.

+0

In Xcode 5, Cmd + rstackhouse