2012-04-02 27 views
5

Tôi đang chạy quy trình nhưng tệp thực thi của nó đã bị xóa. Nếu tôi cố gắng đính kèm gdb, tôi nhận được lỗi sauGDB đính kèm vào quá trình thực thi sẽ bị xóa

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

Làm cách nào để đính kèm gdb vào quá trình này?

mẫu Kiểm tra trường hợp: Mã Nguồn:

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

biên dịch nó

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

Run ./a.out

Bây giờ từ thiết bị đầu cuối khác nhau xóa a.out. Và lửa gdb đính kèm pgrep a.out tệp b.out Nó không hoạt động.

GDB show lỗi sau:

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

Trả lời

7

Hãy thử sử dụng /proc/<pid>/exe làm tệp thực thi. Nó xuất hiện như là một liên kết tượng trưng những ngày này, tuy nhiên, trong quá khứ nó đã có thể trích xuất thực thi đã xóa từ nó.

Xem Detecting deleted executables.

Chúng ta có thể sử dụng lệnh sau để đính kèm gdb

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

trên cửa sổ dưới Cygwin? Tôi nghi ngờ nó ... – littleadv

+0

@ littleadv: huh? câu hỏi được đánh dấu là 'linux'. –

+0

Điều đó hoạt động dưới Linux (Tôi vừa thử nghiệm nó, có ý định đăng bài tương tự), tôi không thấy ai đề cập đến Cygwin ở đây. – Hasturkun

2

Bạn không thể. GDB cần dữ liệu biểu tượng trong tệp thực thi và không được hệ điều hành tải khi chạy chương trình.

+0

tôi không thể xác định tập tin thực thi tương tự nhưng ở vị trí khác nhau? –

+0

@VivekGoel có, bạn có thể, giả định nó thực thi tương tự ... – littleadv

+0

nhưng làm thế nào nếu tôi cung cấp cho quá trình gdb nó nói thực thi đã xóa. Chương trình đã được gỡ lỗi. –

Các vấn đề liên quan