2012-04-02 12 views
5

मेरे पास चल रही प्रक्रिया है लेकिन यह निष्पादन योग्य फ़ाइल हटा दी गई है। अगर मैं gdb संलग्न करने के लिए मैं त्रुटिजीडीबी एक प्रक्रिया को संलग्न करता है जहां निष्पादन योग्य हटा दिया जाता है

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

कैसे मैं इस प्रक्रिया को gdb संलग्न कर सकते हैं निम्नलिखित गया कोशिश?

नमूना टेस्ट मामला: स्रोत कोड:

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

संकलन यह

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

भागो

./a.out

अब अलग टर्मिनल से a.out को हटा दें। और आग gdb संलग्न pgrep a.out फ़ाइल b.out यह काम नहीं करता है।

GDB त्रुटि निम्नलिखित शो:

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

उत्तर

7

निष्पादन योग्य के रूप में /proc/<pid>/exe का उपयोग करने का प्रयास करें। यह इन दिनों एक प्रतीकात्मक लिंक के रूप में प्रतीत होता है, हालांकि, अतीत में हटाए गए निष्पादन योग्य को निकालना संभव था।

Detecting deleted executables देखें।

हम निम्न आदेश का उपयोग gdb

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

? मुझे शक है ... – littleadv

+0

@littleadv: हुह? प्रश्न 'लिनक्स' के रूप में चिह्नित किया गया है। –

+0

जो लिनक्स के तहत काम करता है (मैंने इसे अभी परीक्षण किया है, पोस्ट करने का इरादा रखता है), मैंने किसी को भी साइगविन का उल्लेख नहीं देखा। – Hasturkun

2

आप नहीं कर सकते। जीडीबी को प्रतीक डेटा की आवश्यकता होती है जो निष्पादन योग्य है और प्रोग्राम चलाने के दौरान ओएस द्वारा लोड नहीं किया जा रहा है।

+0

मैं एक ही निष्पादन योग्य फ़ाइल लेकिन अलग अलग स्थान पर निर्दिष्ट नहीं कर सकते संलग्न करने के लिए कर सकते हैं? –

+0

@ विवेकगोएल हाँ, आप इसे एक ही निष्पादन योग्य मान सकते हैं ... – littleadv

+0

लेकिन अगर मैं gdb प्रक्रिया देता हूं तो यह निष्पादन योग्य हटा देता है। कार्यक्रम पहले ही डीबग किया गया है। –

संबंधित मुद्दे