2013-05-07 7 views
16

मैं हमारी x86 प्रक्रिया के लिए x64 मशीन पर बनाई गई हैंग डंप फ़ाइल का शोध करने के लिए विंडबग का उपयोग करने की कोशिश कर रहा हूं।एसओएस वर्तमान लक्ष्य आर्किटेक्चर का समर्थन नहीं करता

.loadby sos clr 
.load wow64exts 
!sw 
kL 

हालांकि, हर मैं !clrstack मैं शीर्षक में त्रुटि मिलती है के माध्यम से प्रबंधित ढेर प्राप्त करने की कोशिश: यह एक 4.0 x86 आवेदन तो बस एक अप्रबंधित ढेर प्राप्त करने के लिए, मैं निम्नलिखित करना पड़ा है। मैं क्या खो रहा हूँ?

+0

क्या आप विंडोज 8 मशीन पर WinDbg चला रहे हैं? मुझे केवल एक विंडोज 8 मशीन में एक ही त्रुटि संदेश मिलता है। अगर मैं किसी फ़ाइल में मेमोरी डंप करता हूं तो मैं एसओएस नहीं चला सकता, भले ही मैं करता हूं! Wow64exts.sw 32-बिट मोड पर स्विच करने के लिए। हालांकि मैं प्रक्रिया को संलग्न करता हूं तो मैं एसओएस निष्पादित कर सकता हूं ... –

उत्तर

22

मेरा मानना ​​है कि आपको 32-बिट डंप प्राप्त करने के लिए C: \ Windows \ SysWOW64 \ taskmgr.exe में स्थित 32-बिट कार्य प्रबंधक का उपयोग करना होगा।

अधिक जानकारी यहाँ: http://blogs.msdn.com/b/tess/archive/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine.aspx

+0

तो, मौजूदा डंप का उपयोग करने का कोई तरीका नहीं है? –

+0

ऊपर दिए गए लिंक में एक टिप्पणी चल रही है! Wow64exts.sw, जो आपको स्टैक से संबंधित कमांड चला सकता है, जैसे! Clrstack।मैंने खुद को कभी भी कोशिश नहीं की क्योंकि मैं इसके बजाय एक नया डंप पकड़ने में सक्षम हूं। – trydis

+0

मैं इसे एक दिन के लिए खोलने जा रहा हूं ताकि यह देखने के लिए कि किसी के पास कोई जवाब है या नहीं, यह नहीं है कि मैं डू हूं, अन्यथा मैं इसे स्वीकार करूंगा –

5

मैं हमेशा bitness मिलान की सिफारिश का पालन किया है लेकिन वास्तव में कभी नहीं पता था कि क्यों जब तक मैं इस लेख भर में आया था: http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx जिसमें कहा गया है:

"डीएसी है एक मानकीकृत इंटरफ़ेस और पर डिबगर द्वारा उपयोग किया जाता है, उन अवशेषों की स्थिति के बारे में जानकारी प्राप्त करें, उदाहरण के लिए, प्रबंधित ढेर। सीएआर संस्करण और प्रक्रिया या क्रैश डंप से मेल खाने वाले डीएसी का उपयोग करना आवश्यक है आप निरीक्षण करना चाहते हैं। "

और

"ध्यान दें कि डीएसी एक देशी DLL है और कार्यक्रम ClrMD का उपयोग करता है में लोड किया जाना चाहिए। डंप या लाइव प्रक्रिया 32-बिट है, तो आप चाहिए उपयोग डीएसी का 32-बिट संस्करण, जो बदले में, इसका मतलब है कि आपका निरीक्षण कार्यक्रम 32-बिट भी होना चाहिए। 64-बिट प्रक्रियाओं के लिए भी यह सच है। सुनिश्चित करें कि आपके प्रोग्राम का प्लेटफ़ॉर्म से मेल खाता है डिबगिंग कर रहे हैं। "

2

एक और विकल्प है कि मेरे लिए काम किया है: - मैं एक 64 बिट प्रक्रिया के क्रैश डंप किया था। - तो, ​​सबसे पहले, मुझे मशीन से SOS.dll और mscordacwks.dll की आवश्यकता थी (सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework64 \ v4.0.30319) जहां डंप लिया गया था। - दो MSDN लेख (http://msdn.microsoft.com/en-gb/library/windows/hardware/ff562263%28v=vs.85%29.aspx, http://msdn.microsoft.com/en-gb/library/windows/hardware/ff540665%28v=vs.85%29.aspx) के आधार पर, मैं CLR इस तरह से भरी हुई:

.cordll -u -ve -I clr -lp <path to SOS.dll & mscordacwks.dll> 

इस के बाद, धागे से काम किया। मुझे लगता है, 32-बिट क्रैश डंप के लिए भी आवेदन करना चाहिए।

8

जैसा कि अन्य ने पहले ही कहा है, यह 64 बिट अनुप्रयोग (उदाहरण के लिए डिफ़ॉल्ट कार्य प्रबंधक की तरह) के कारण हो सकता है, 32 बिट प्रक्रिया की डंप फ़ाइल बनाते हैं।

मैं poizan42 on GitHub से soswow64 WinDbg एक्सटेंशन का उपयोग कर समस्या को हल करने में सक्षम था। मैंने इसे this blog entry के माध्यम से पाया है, जो इस मुद्दे के बारे में कुछ और विस्तृत जानकारी भी प्रदान करता है।

+0

मुझे पूरा यकीन है कि यह अब जवाब होना चाहिए, लेकिन मैं थोड़ा पक्षपातपूर्ण हो सकता है;) – poizan42

+0

@ poizan42 धन्यवाद soswow64 के लिए बहुत कुछ, यह मेरे काम को इतना आसान बना दिया था! –

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