Pregunta

En mi programa necesito crear sockets y vincularlos para escuchar el puerto HTTP (80). El programa funciona bien cuando lo ejecuto desde la línea de comandos con sudo, aumentando los permisos a la raíz. Ejecutar bajo XCode da un error de "permiso denegado" en la llamada a la función de enlace (asio :: ip :: tcp :: accepttor :: bind ()).

¿Cómo puedo depurar en XCode?

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

¿Fue útil?

Solución

Actualización : para Xcode 4.5 y posterior, consulte esta respuesta en su lugar.


La única forma en que soy consciente de hacer lo que me pides es ejecutar Xcode como root.

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

Una vez que se 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 algún archivo, será propiedad de root, lo que significa que tendrá que chown antes de poder editarlo como su usuario normal primero.

Me encantaría que Xcode dijera "Iniciar proceso como root", pero que yo sepa, 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. Ejecutar

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

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

EDITAR : Lectores del futuro: vea la respuesta de Alexander Stavonin; habla sobre cómo hacer esto. Si está de acuerdo con las claves ssh y habilita al usuario root en su sistema, su respuesta es el camino a seguir.

Otros consejos

En Xcode 4.5 Producto - > Editar esquema : Busque en la pestaña Información en Proceso de depuración como y elija la opción root .

Xcode puede ejecutar la aplicación de depuración como root. Para este propósito, se deben realizar los siguientes pasos:

  1. Habilite el usuario root para la máquina local.

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

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

  2. Habilitar el registro remoto.

    a. En Preferencias del sistema ... - > Compartir, verifique el inicio de sesión remoto. Esta opción activa el demonio ssh.

  3. Cree claves públicas / privadas ssh y copie la clave pública en la carpeta .ssh / Authorised_keys para el usuario root.

    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 en la raíz: cat ~ / .ssh / id_rsa.pub | raíz ssh @ localhost " cat - > > ~ / .ssh / optional_keys "

    e. Comprueba si todo está bien. Escriba ssh root @ localhost . No debe solicitar la contraseña de root.

  4. Habilite la depuración remota a través de ssh en Xcode.

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

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

  5. Todo debería estar bien ahora ?

Del blog

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

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

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

Depuración como root a través de SSH.

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

Si desea depurar un servidor web que se ejecuta en el puerto 443, puede ejecutarlo en el puerto 8443 en su cuenta normal y luego hacer lo siguiente: usuario de sudo ssh @ localhost -L 443: localhost: 8443 -N

Entonces aún puede contactar a su aplicación en el puerto correcto, pero tiene la ventaja de ejecutar la aplicación como un usuario normal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top