2012-04-02 16 views
5

Mam uruchomiony proces, ale plik wykonywalny został usunięty. Gdy próbuję dołączyć gdb mam następujący błądGDB dołączanie do procesu, w którym plik wykonywalny został usunięty

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

Jak mogę dołączyć gdb tym procesie?

Przykładowy test case: Kod Źródło:

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

skompilować to

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

Run ./a.out

Teraz z innym terminalem usuwać a.out. I gdb dołączyć pgrep a.out plik b.out To nie działa.

GDB pokazuje następujący błąd:

/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. 

Odpowiedz

7

Spróbuj użyć /proc/<pid>/exe jako pliku wykonywalnego. Obecnie jest to link symboliczny, jednak w przeszłości możliwe było wyodrębnienie z niego usuniętego pliku wykonywalnego.

Zobacz Detecting deleted executables.

Możemy użyć następującego polecenia, aby dołączyć GDB

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

w oknach pod cygwin? Wątpię w to ... – littleadv

+0

@littleadv: huh? pytanie jest oznaczone jako "linux". –

+0

Który działa pod Linuksem (właśnie go przetestowałem, zamierzam opublikować to samo), nie widziałem nikogo, kto wspomniałby tutaj cygwin. – Hasturkun

2

Nie możesz. GDB potrzebuje danych symbolu, które znajdują się w pliku wykonywalnym i nie są ładowane przez system operacyjny podczas uruchamiania programu.

+0

nie mogę określić ten sam plik wykonywalny, ale w innym miejscu? –

+0

@VivekGoel tak, możesz, zakładając, że jest to ten sam plik wykonywalny ... – littleadv

+0

, ale w jaki sposób podaję proces gdb , który mówi, że plik wykonywalny został usunięty. Program już debugowany. –

Powiązane problemy