2010-05-23 9 views
30

Estoy programando la aplicación usando libpcap. cuando depuro la aplicación en modo normal, pcap no puede obtener el dispositivo de red. parece que tengo que depurar la aplicación en la raíz. ¿Cómo puedo depurar la aplicación en la raíz? Tengo la contraseña de root. Creo que eclipse tiene una opción que puede agregar root para la aplicación de depuración, pero no sé cómo hacerlo. por favor ayuda.cómo depurar la aplicación como raíz en eclipse en Ubuntu?

+1

Básicamente, ejecute el depurador como root. ¿Estás tratando de usar un depurador a través de un IDE? – Artelius

+0

¿Puede decirme cómo ejecutar el depurador como raíz? sí, uso eclipse IDE. – futang

+0

A menos que también esté ejecutando su IDE como root, probablemente no haya una manera fácil o directa de ejecutar su depurador como root. – nategoose

Respuesta

-1

Desde la consola en el directorio con el ejecutable:

sudo gdb ./my_program 

Si Eclipse admite la depuración remota entonces se podría hacer eso a pesar de que se está ejecutando localmente.

Desde la consola:

sudo gdbserver localhost:<port_number> ./my_program 

y luego decirle la dirección de Eclipse (localhost y el número de puerto que eligió).

Oh, sí, dijiste que la razón por la que estabas haciendo esto era porque usabas libpcap, por lo que no querrás usar la depuración remota sobre TCP porque puedes terminar capturando tus paquetes de conexión de depuración además de tu otro tráfico de red .

En ese caso, realiza la depuración remota (pero realmente local) a través de un puerto en serie. Nunca he hecho esto en una máquina local, pero se puede usar dos puertos serie reales (uniéndolos a través de un módem nulo) o intentar usar un psudoterminal:

sudo gdbserver /dev/ptmx ./my_program 

Esto creará el psudoterminal bajo /dev/pts/ pero Tendrá que descubrir su nombre y también puede crearlo con permisos restrictivos. Puedes evitarlos. A menos que esté ejecutando muchas ventanas de terminal como raíz, no es probable que tenga muchas entradas bajo /dev/pts que pertenecen a la raíz, así que tome nota de la que hace después de ejecutar el comando anterior y luego sudo chmod o sudo chown para que sea utilizable para su usuario normal y luego decirle a su depurador que lo use como su conexión serial a su destino de depuración remota.

3

lanzamiento de Eclipse con sudo (simplemente para la corrección: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)

Actualización: Siga xmoex solución. Si ejecuta Eclipse como root (es decir, usando sudo), sus archivos serán propiedad de root ... que probablemente no desee.

+0

Esto no es una buena idea, como se explica aquí: http://stackoverflow.com/questions/2580279/how-do-i-run-my-application-as-superuser-from-eclipse#comment2588681_2580560 –

+0

estoy de acuerdo contigo Paolo , la respuesta xmoex es una solución mucho mejor. –

56
  1. Habilitar el usuario para ejecutar como root sin ser pedido por cualquier contraseña:
    sudo visudo
    Añadir la siguiente línea después de todas las demás reglas:
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. Crear o modificar una configuración de depuración en para ejecutar gdb como root
    por ej. en Ejecutar> Depurar Configuraciones> C/C++ aplicación> YourProject Depuración:
    cambio Depurador> principal> depurador GDB de gdb a sudo -u <youruser> gdb

actualización (y advertencia!):

En su comentario nategoose señaló que esta respuesta debe venir con una advertencia:

que permite al usuario utilizar sudo para gdb como se sugiere en mi respuesta , de hecho, da privilegios de administrador a él/ella que en muchos casos podría ser un efecto secundario no deseado. Por lo tanto, considero que la respuesta es adecuada en un entorno donde no se supone que el usuario intente dañar el sistema (p. Ej., Es su propia computadora personal o una máquina virtual)

Para un entorno de usuario múltiple (no confiable) Creo que podría ser una mejor idead para utilizar unix' file capabilities para permitir gdb para depurar una aplicación sin necesidad de privilegios de administrador

+4

Cambié el depurador de gdb a sudo gdb y funciona. – shahensha

+1

brillante respuesta, tenga en cuenta para otros un pequeño problema me encontré con hacer esto: Tengo LD_LIBRARY_PATH establecer como mi usuario, pero la raíz no lo tiene, por lo que añade a mi comando sudo sudo, pero no permitirá configurar LD_LIBRARY_PATH así que se agregó esto en visudo 'Valores predeterminados env_keep + = "LD_LIBRARY_PATH"' – stu

1

Otra solución es que le conceda (o el ejecutable BGF) los derechos para hacer un poco de pcap captura como mentioned here. Con algo como esto:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb 

debe poder permitir la captura de paquetes a gdb sin ser root.

+0

Esto funcionó cuando se ejecutó como superusuario. También hizo más fácil la depuración remota mediante la concesión también el acceso a PCAP capta a 'gdbserver' – fredk

0

esta pregunta fue hecha hace mucho tiempo, pero si esto ayudará a cualquiera que abra un error en Bugzilla y esto corta el hilo resolvió el problema: bugzilla bug

3

Puede utilizar gdbserver en localhost para adjuntar un proceso existente , la siguiente es la línea de comandos:

sudo gdbserver :<listening port> --attach <pid> 

o puede crear un nuevo proceso utilizando gdbserver:

sudo gdbserver :<listening port> <process executable> 

continuación, puede crear una configuración de depuración en Eclipse, en la pestaña depurador, el elemento depurador, seleccione gdbserver, y la entrada del puerto de escucha en la pestaña de conexión en el fuelle.

-1

forma más fácil, tratar sudo ./eclipse, a continuación, eliminar errores como de costumbre

+0

Por favor, no dar respuesta duplicado. – lnman

Cuestiones relacionadas