En algún momento necesito ejecutar una aplicación desde la terminal para la depuración. Si estoy seguro de que el error ocurrirá poco después de iniciar la aplicación, puedo ejecutar esta aplicación desde la Terminal.
Sin embargo, los errores ocurren inesperadamente, y solo necesito monitorear la aplicación con errores desde la Terminal (para ver su salida).
¿Puedo entonces recoger una aplicación desde la terminal, que no se inició usando Terminal? ¿Si es así, cómo?
command-line
process
debugging
Benjamín
fuente
fuente
~/.xsession-errors
si lo inició a través de GUI.Respuestas:
Cada proceso en Linux tiene un directorio especial
/proc/{pid}/fd/
. 0 es stdin, 1 es stdout y 2 es stderr. Entonces, suponiendo que solo esté interesado en la salida de diagnóstico, puede determinar el proceso pid, y luego en el terminal hacer:para ver stdout:
para ver stderr:
fuente
cat /proc/1840/fd/1
parece que devuelve resultados de otros procesos que el que recogí. (1840 es actualmente para Skype según System Monitor) Muestra también la salida de otros programas ...: |O puedes usar
strace
asífuente
Puede adjuntarlo
gdb
a un proceso en ejecución.La sintaxis es
Ok, no puede ver el código fuente si la información de depuración se elimina, que es el valor predeterminado para las aplicaciones implementadas. Pero probablemente pueda ver mensajes stdout / stderr y depuradores, segfaults.
fuente
gdb program 1452
(también lo intentégdb 1452
), pero devuelve "1452: No existe tal archivo o directorio".GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... 1840: No such file or directory.
gdb program pid
. Creo que la salida quegdb pid
Es probable que estés buscando
retty
. También puede buscar "adjuntar tty". Básicamente se hace usandoptrace
para que puedas incluso rodar el tuyofuente