2009-06-23 17 views
24

En mi programa necesito crear sockets y vincularlos para escuchar el puerto HTTP (80). El programa funciona bien cuando lo lanzo desde la línea de comando con sudo, escalando permisos a la raíz. Correr bajo XCode da un error de 'permiso denegado' en la llamada a la función de enlace (asio :: ip :: tcp :: acceptor :: bind()).Depuración en XCode como root

¿Cómo puedo depurar en XCode?

Todo hecho en C++ y boost.asio en Mac OS X 10.5 con XCode 3.1.2.

Respuesta

23

Actualización: Para Xcode 4.5 y posteriores, consulte this answer en su lugar.


La única forma que conozco de hacer lo que me pide es ejecutar Xcode como root.

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

Una vez que esté ejecutando como root, cualquier proceso iniciado desde Xcode también se ejecutará como root. Sin embargo, tenga en cuenta que si crea o edita cualquier archivo, será propiedad de root, lo que significa que tendrá que marcarlos chown antes de poder editarlos como su usuario normal primero.

Me encantaría que Xcode diga "Inicie el proceso como root", pero hasta donde yo sé, no hay tal funcionalidad disponible.

Tenga en cuenta que también puede ejecutar la aplicación dentro del depurador de línea de comandos gdb para depurar su aplicación. Ejecute

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

Luego puede mantener abierto Xcode, modificar a voluntad y depurar su programa dentro de gdb. Esto es lo que generalmente hago.

EDIT: Lectores del futuro: vea la respuesta de Alexander Stavonin; habla sobre cómo hacer esto. Si estás de acuerdo con las claves ssh y habilitas al usuario raíz en tu sistema, su respuesta es la mejor opción.

+0

Gracias, pero este problema con el propietario de los archivos es realmente molesto. – Anton

+0

Desafortunadamente, el método de Alexander no parece funcionar con XCode4, por lo que el método sudo en esta respuesta parece ser el único que funciona. – JosephH

0

Depurar como raíz a través de SSH.

Editar Active Executable -> Depuración -> Depurar ejecutable de forma remota a través de SSH.

+0

No puedo hacerlo funcionar. Lo que configuré en esta página: Cuando use "GDB" Use "Pipe" para entrada/salida estándar, "Checked" ejecutable de forma remota a través de SSH, conéctese a: "[email protected]", "Unchecked" Comience ejecutable después iniciando el depurador Y cuando estoy ejecutando mi aplicación muestra un cuadro de diálogo con autenticación SSH, pero al ingresar mi contraseña como frase de contraseña me aparece "Autenticación fallida". También traté de usar mi nombre de usuario, pero tampoco funciona. Y, por cierto, la aplicación no comienza en absoluto. ¿Qué estoy haciendo mal? – Anton

13

Xcode puede ejecutar la aplicación de depuración como raíz. Para ello, se deben realizar los siguientes pasos:

  1. Habilite el usuario raíz para la máquina local.

    a. Ejecute "Directory Utility" (/ System/Library/CoreServices/Directory Utility.app)

    b. Seleccione "Habilitar usuario raíz" en el menú Editar e ingrese la contraseña de root.

  2. Habilitar el registro remoto.

    a. En Preferencias del sistema ... -> Compartir, revise Inicio de sesión remoto. Esta opción enciende el demonio ssh.

  3. Crea claves públicas/privadas ssh y copia la clave pública en la carpeta .ssh/authorized_keys para el usuario raíz.

    a.Abra la terminal en la máquina local y escriba ssh-keygen -t rsa

    b. Acepte la ubicación predeterminada y escriba la contraseña para la raíz.

    c. Inicie sesión como root su - y cree el directorio ~/.ssh. (~ ==/var/root)

    d. Copie la clave pública a la raíz: cat ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

    e. Verifica si todo está bien. Tipo ssh [email protected]. No debería pedir la contraseña de root.

  4. Habilite la depuración remota mediante ssh en Xcode.

    a. Seleccione «Obtener información» del menú desplegable en «Ejecutables».

    b. En la configuración de "Depuración", marque «Depurar ejecutable de forma remota a través de ssh» y ponga root @ localhost como la información «Conectar a».

  5. Todo debe estar bien ahora ☺

From blog

+0

Parece que no puedo encontrar «Depurar ejecutable de forma remota a través de ssh» en Xcode4. ¿Lo es? –

+0

Lamentablemente, no sé. En este momento, la mejor solución para mí es GBD en caso de depuración de root. –

0

Si desea depurar un servidor web que se ejecuta en el puerto 443, en su lugar podría ejecutarlo en el puerto 8443 en su cuenta normal y luego a a: sudo ssh user @ localhost -L 443: localhost: 8443 -N

Luego, puede seguir contactando su aplicación en el puerto correcto, pero tiene la ventaja de ejecutar la aplicación como un usuario normal.

2

XCode ya no es compatible con la depuración remota, lo que hace obsoletas la mayoría de estas respuestas.

Para depurar un programa como root ahora es fácil. En el menú Producto, use "Editar esquema ..." y en el panel "Información" de esquemas "Ejecutar", seleccione "Proceso de depuración como raíz". Tendrá que autenticarse una vez.

A partir de Xcode 4.5 recibí un extraño error hasta que terminé Xcode y reinicié.

21

En Xcode 4.5 Producto -> Editar Esquema: Busque en la pestañaInformación bajo proceso de depuración Como y elija la opción raíz.

+0

En Xcode 5, Cmd + rstackhouse

Cuestiones relacionadas