Gdb (osx) में फ़ाइल को मेमोरी डंप कैसे करें? मेरे काम को बचाने की जरूरत है


9

मुझे यह जानने की जरूरत है कि मैं एक फाइल में Safari.app में मेमोरी डंप कैसे कर सकता हूं।

मैंने gdb 6741 (मेरी सफारी पीआईडी) संलग्न किया है।

अब क्या?

मैंने Google पर gdb पर मदद की खोज करने की कोशिश की, लेकिन मुझे ऐसा कुछ भी नहीं मिला, जो मुझे बताए कि क्या करना है, यहां तक ​​कि "gdb में मेमोरी डंप कैसे करें" :(

मैंने "हेल्प डंप" की कोशिश की, इसने मुझे आदेशों का एक गुच्छा दिया, लेकिन उनमें से किसी ने भी काम नहीं किया। निकटतम मैं आया था:

(gdb) dump memory ~/safaridump.bin 0
Missing stop address.

तो स्टॉप एड्रेस क्या है? मुझे नहीं पता? स्टॉप एड्रेस को जानने के लिए मेरा क्या मतलब है? मैंने "लापता स्टॉप एड्रेस" जीडीबी "के लिए Google पर खोज करने की कोशिश की, यह मदद नहीं की। मुझे नहीं पता कि मुझे स्टॉप एड्रेस कैसे मिलेगा।

मैंने यह कोशिश की:

(gdb) डंप मेमोरी ~ / safaridump.bin 0 0xffffffff

यह भी काम नहीं किया।

मुझे यह मिल गया:

gdb stack crawl at point of internal error:
0   gdb-i386-apple-darwin               0x0012fd8f internal_vproblem + 316
1   gdb-i386-apple-darwin               0x0012ffd3 internal_verror + 43
2   gdb-i386-apple-darwin               0x00130008 align_down + 0
3   gdb-i386-apple-darwin               0x00130a21 xstrvprintf + 0
4   gdb-i386-apple-darwin               0x00130c25 xmalloc + 40
5   gdb-i386-apple-darwin               0x000045d6 dump_memory_to_file + 241
6   gdb-i386-apple-darwin               0x0012dd3d execute_command + 713
7   gdb-i386-apple-darwin               0x0008815d command_handler + 213
8   gdb-i386-apple-darwin               0x000891af command_line_handler + 1120
9   gdb-i386-apple-darwin               0x001c2486 rl_callback_read_char + 137
10  gdb-i386-apple-darwin               0x000882ed rl_callback_read_char_wrapper + 18
11  gdb-i386-apple-darwin               0x000874b7 handle_file_event + 349
12  gdb-i386-apple-darwin               0x00086e7e process_event + 131
13  gdb-i386-apple-darwin               0x00087c38 gdb_do_one_event + 1178
14  gdb-i386-apple-darwin               0x00081bfd catch_errors + 78
/SourceCache/gdb/gdb-1346/src/gdb/utils.c:1208: internal-error: virtual memory     exhausted.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) n

मैं वास्तव में यह नहीं मिलता है। सभी मैं चाहता हूं, सफारी में मेरी मेमोरी है, जो एक फ़ाइल में लिखी गई है।

यह वास्तव में मेरे लिए महत्वपूर्ण है। मैंने सफारी में अपने गरीब दिल को टाइप करने में लगभग 2 घंटे बिताए, कुछ महत्वपूर्ण जानकारी नीचे लिखी। और फिर मैं जिस बेवकूफ वेबसाइट को लिख रहा था, उसने मेरे पोस्ट को स्वीकार नहीं किया, क्योंकि मैंने इसे लिखने में इतनी देर लगा दी थी, कि मैंने "साइन आउट" कर दिया था। जब तक मैंने वापस साइन इन किया था, तब तक मेरा पद खो गया था।

मैं वास्तव में इस लेखन को वापस चाहता हूं। मैं जो चाहता हूं वह सफारी से मेमोरी है, इसलिए मैं कुछ कीवर्ड के लिए यह देख सकता हूं कि क्या मुझे अपना लेखन वापस मिल सकता है।

किसी को कोई विचार?

बहुत कम से कम, भले ही मुझे अपना लेखन वापस न मिले, मैं gdb के बारे में कुछ सीखूंगा। जो मेरे सॉफ्टवेयर विकास में काम आ सकता है;)

यदि आप मदद कर सकें तो बड़ी कृपा होगी! यह मेरे लिए इतना मतलब होगा। मैं सफारी और जीडीबी को छोड़ने जा रहा हूं, जब तक मुझे जवाब नहीं मिल जाता। जब तक मुझे यह पता नहीं चल जाता है कि मुझे पता है कि मैं अपना लेखन वापस नहीं पा सकता हूं या नहीं।

अगर किसी को खोए हुए काम को कैसे पुनर्प्राप्त करना है, इसके बारे में अधिक सामान्य उत्तर देना चाहते हैं ... एक अच्छी बात है। इस तरह के कार्यक्रमों के रूप में विशिष्ट तार के लिए मेरी पूरी हार्ड डिस्क को खोजने के लिए जो काम खो जाने से पहले वीआरएएम में हो सकता था।

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html यह पृष्ठ कहता है कि किल -9 कोर डंप उत्पन्न नहीं करता है। इस पृष्ठ के कहने के बावजूद http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , यह आदेश "किल -ABRT (PID HERE"), एक कोर डंप नहीं बनाएगा।

ls -la /cores
total 0
drwxrwxr-t@  2 root  admin    68 23 Jun 07:19 .
drwxrwxr-t  38 root  admin  1360 14 Dec 16:06 ..
macos  gdb 

1
+1 सहानुभूति अपवोट - मैं आपके डेटा को पुनर्प्राप्त करने की संभावनाओं के बारे में आशावादी नहीं हूं, यह देखते हुए कि आपने पहले से ही क्या प्रयास किया है। लेकिन यह एक वैध डिबगिंग प्रश्न है, स्पष्ट रूप से लिखा गया है, जिसमें प्रासंगिक विवरण शामिल हैं: मुझे नहीं लगता कि यह कम होने का हकदार है!
जिम लुईस

एनएसडी। आप ढेर का अंत कैसे पाते हैं? आपके द्वारा वापस लौटाए गए नंबर को पाने के लिए आपको क्या कमांड टाइप करना है? क्या आप वास्तव में जानते हैं? या आप सिर्फ मेरी मदद करने की कोशिश नहीं कर रहे हैं?

यह बहुत अच्छी तरह से काम नहीं कर रहा है। मैंने यह कोशिश की: < developer.apple.com/mac/library/documentation/DeveloperTools/… > इसलिए मैंने "gcore bla2.bin" टाइप किया। और लगता है मुझे मिलता है? "अनिर्धारित कमांड:" gcore "।" मदद "की कोशिश करें।" Apple के डॉक्स का कहना है कि यह फ़ंक्शन कुछ सिस्टम पर उपलब्ध नहीं है। मुझे लगता है कि मैक का मतलब है, भी? मुझे आश्चर्य है कि Apple के डॉक्स को यूएक्सएक्स के व्यवहार को निर्दिष्ट करने वाले यूनिक्सी जीडीबी पर सामान्य जानकारी क्यों होगी ...

developer.apple.com/mac/library/documentation/DeveloperTools/… लिंक था, किसी तरह यह टूट गया?

थोड़ा और प्रयोग करने के बाद, मैंने यह पाया: "डंप बाइनरी मेमोरी ~ / dump3.bin 0 0x0000FFFF" ने कुछ डेटा का उत्पादन किया जो पूरी तरह से शून्य नहीं था। लेकिन ... यहाँ कुछ भी मूल्य नहीं था और यह केवल पहले 64KB था। यह ... "डंप बाइनरी मेमोरी ~ / dump3.bin 0 0x000fFFFF" पूरी तरह से शून्य युक्त एक फ़ाइल का उत्पादन किया। शून्य का 1MB। मुझे कोई जानकारी नहीं है की क्यों। मेरा अनुमान है (जब तक कोई व्यक्ति जो gdb का उपयोग वास्तव में करने में मदद करता है जानता है), यह है कि मैंने "अप्रयुक्त" क्षेत्रों को पार कर लिया है, जो कि मॉलोक द्वारा भी आवंटित नहीं किए गए थे। और इस वजह से, gdb जीरो आउटपुट करता है। आखिरकार, सफारी में 1MB से अधिक डेटा शामिल है;)

जवाबों:


6

हे सब लोग, मैंने पाया कि कैसे OSX पर एक coredump उत्पन्न करने के लिए!

http://osxbook.com/book/bonus/chapter8/core/

वहाँ एक डाउनलोड करने योग्य कार्यक्रम है, स्रोत रूप में। मैंने इसे डाउनलोड किया, इसे संकलित किया, और, हुर्रे! इसने काम कर दिया! इसने लगभग 1GB कोर डंप उत्पन्न किया!

जानकारी है या नहीं, इसमें अभी कोई बात नहीं है। मैंने सीखा कि OSX पर कोरडम्प कैसे उत्पन्न किया जाए, जो निश्चित रूप से एक सॉफ्टवेयर डेवलपर के रूप में एक आसान कौशल हो सकता है;) आप कभी नहीं जानते कि कोई कोर डंप कब काम आ सकता है।

मैं बस कुछ ही वर्षों की कल्पना कर सकता हूं कि मैं एक महत्वपूर्ण काम कर रहा हूं, और मुझे व्हाट्सएप पर जाने के लिए एक कोर डंप की आवश्यकता है, और यह "gcore" ऐप वही है जो मुझे चाहिए था। भले ही यह एक बार भुगतान कर दे ... यह अच्छी बात है।


1
आप इसे भी स्थापित कर सकते हैं: शराब की भठ्ठी स्थापित करें
Guido

आप इन निर्देशों का उपयोग यहां कर सकते हैं कि वे जल्दी से gcore स्थापित कर सकें। यदि यह कहता है कि "बैश: काढ़ा: कमांड नहीं मिला" तो इस लिंक का उपयोग करके होमब्रे को स्थापित करें
I_With_Stupid

gcore10.12 सिएरा के बाद से मैकओएस में शामिल है । यह स्थित है /usr/bin/gcoreऔर इसमें मैन पेज भी है /usr/share/man/man1/gcore.1। यह आगे Homebrew द्वारा पुष्टि की जाती है जो सिएरा या उच्चतर पर स्थापित gcoreकरने से इनकार करता है/usr/local/bin
जीडीपी 2

1

सफ़ारी सभी रूपों के लिए फॉर्म डेटा को बचाता है (जब तक कि आप इसे बंद नहीं करते, या साइट एक एन्क्रिप्टेड डेटाबेस फ़ाइल में फॉर्म को नोट-टू-सेव के रूप में चिह्नित करती है)। आप अपने लॉगिन किचेन में फ़ाइल के लिए पासवर्ड पा सकते हैं, और फ़ाइल चालू है ~/Library/Safari/Form Values, इसलिए सैद्धांतिक रूप से, आप फ़ाइल से डेटा निकाल सकते हैं, और देख सकते हैं कि आपने क्या टाइप किया है।

हालाँकि, मेरे पास एक हैक है, और मैं यह नहीं बता सकता कि फ़ाइल किस प्रारूप में है, या यह कैसे एन्क्रिप्ट किया गया है, इसलिए मुझे नहीं पता कि वास्तव में सामग्री कैसे मिलती है, मुझे यकीन है कि कोई भी करता है :)


अगर सफारी ने इस फाइल में पोस्ट को सेव किया है, तो आप इसे उसी फॉर्म में जाकर खोये हुए टेक्स्ट के पहले कुछ अक्षर टाइप करके भी प्राप्त कर सकते हैं। संपूर्ण को स्वतः पूर्ण सुझाव के रूप में पॉप अप किया जाना चाहिए।

स्वतः-पूर्ण चीज़ पोस्ट सामग्री के लिए काम नहीं करती है। यह केवल सिंगल लाइन फील्ड के लिए काम करता है। सैकड़ों पंक्तियों के साथ पूरे लेख नहीं।

धन्यवाद। मुझे संदेह है कि इस फ़ाइल में पोस्ट सामग्री है। मैंने 2GB फ़ाइल बनाते हुए 0 से 7ffffFFFF डंप करने का प्रबंधन किया। हालांकि, इसमें पूरी तरह से शून्य शामिल था। यहाँ कुछ ठीक नहीं है। ऐसा क्यों होगा?: डंप मेमोरी ~ / bla.bin 0 0x7fffFFFF परिणाम पूरी तरह से शून्य वाले फ़ाइल में है? सफारी शून्य पर नहीं चल रहा है? मैं यह मान रहा हूँ कि इसके अंदर कुछ कोड होना चाहिए? ;)

0

आप हमेशा GDB में लॉगिंग चालू कर सकते हैं set logging on

फिर, आप जो कुछ भी करते हैं वह लॉग फ़ाइल (आमतौर पर gdb.txt) पर मुद्रित होता है। तो आप बस xकमांड का उपयोग करके मेमोरी को प्रिंट करना शुरू कर सकते हैं , और सब कुछ लॉग फाइल के साथ-साथ स्क्रीन पर भी जाएगा।


0

देखें कि क्या OSX में एक pmap कमांड है, यह आपको किसी भी चलने वाली प्रक्रिया की मैप की गई मेमोरी दिखाएगा। यह आमतौर पर लिनक्स सिस्टम में / से खरीदा जाता है। अगला, यदि आप किसी विशेष जानकारी की खोज कर रहे हैं, तो आप gdb खोज कमांड का उपयोग कर सकते हैं। अधिक निर्देशों के लिए gdb में टाइप सहायता खोजें।


-1

मुझे पता है, पुराना धागा ...

gdb में वर्तमान प्रक्रिया / कार्यक्रम की एक कोर छवि को डंप करने के लिए एक अंतर्निहित कमांड है।

generate-core-file [filename]
gcore [filename]

दोनों आदेशों को एक ही करते हैं, फ़ाइल नाम वैकल्पिक है, ' कोर <def_ults> डिफॉल्ट्स '

हुह! ऐसा लगता है कि वर्तमान में चल रहे प्रोग्राम को भी डंप करने के लिए 'gcore' नामक एक यूटिलिटी स्थापित की गई है। बेशक, प्रक्रिया को जीडीबी के साथ रोकना आसान है, फिर इसे डंप करें।

हर दिन नई चीजें ढूंढना! ... लेकिन gdb में फंक्शन बिल्ट-इन है ... बस इतना ही पता है ..


(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".
स्लिप डी। थॉम्पसन

2
sourceware.org/gdb/oniltocs/gdb/Core-File-Generation.html यह सुझाव देता है कि यह OS X पर लागू नहीं होता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.