2012-04-02 11 views
5

Tengo el proceso en ejecución pero se ha eliminado el archivo ejecutable. Si intento para unir GDB Me siguiente errorGDB adjuntándose a un proceso donde se eliminó el ejecutable

/home/vivek/binary/releases/20120328101511/bin/app.exe (deleted): No such file or directory. 

¿Cómo puedo adjuntar gdb a este proceso? Caso de prueba

muestra: código Fuente:

#include<stdio.h> 
#include<stdlib.h> 
int main(){ 
    for (;;){ 
    printf("Sleeping"); 
    sleep(1); 
    } 
} 

compila

gcc main.cc -o a.out 
gcc main.cc -o b.out 

Run ./a.out

Ahora desde diferentes terminales borrar a.out. Y fuego gdb adjuntar pgrep a.out archivo b.out No funciona.

espectáculos GDB de error siguientes:

/tmp/temp/a.out (deleted): No such file or directory. 
A program is being debugged already. Kill it? (y or n) n 
Program not killed. 

Respuesta

7

Pruebe usar /proc/<pid>/exe como el ejecutable. Parece ser un enlace simbólico en estos días, sin embargo, en el pasado era posible extraer el ejecutable eliminado de él.

Ver Detecting deleted executables.

Podemos utilizar siguiente comando para adjuntar gdb

gdb <path-to-binary> <pid> 
+0

en windows bajo cygwin? Lo dudo ... – littleadv

+0

@littleadv: ¿eh? la pregunta está marcada como 'linux'. –

+0

Eso funciona bajo Linux (lo acabo de probar, con la intención de publicarlo), no vi a nadie mencionar aquí a cygwin. – Hasturkun

2

No se puede. GDB necesita los datos de los símbolos que se encuentran en el archivo ejecutable y no están siendo cargados por el sistema operativo cuando ejecuta el programa.

+0

no puedo especificar mismo archivo ejecutable, pero en distintos lugares? –

+0

@VivekGoel sí, puede, suponiendo que es el mismo ejecutable ... – littleadv

+0

pero cómo si le doy el proceso de gdb dice ejecutable borrado. Programa ya depurado. –

Cuestiones relacionadas