2010-06-15 18 views
6

मेरे डायरेक्टएक्स एप्लिकेशन के अंत में मुझे "डायरेक्ट 3 डी डिवाइस में एक गैर-शून्य संदर्भ गणना है, जिसका अर्थ है कि कुछ ऑब्जेक्ट जारी नहीं किए गए थे।" आवेदन बड़ा है और मेरे द्वारा लिखित नहीं है, मैं डीबगिंग के बारे में कैसे जा सकता हूं कि कौन से संसाधन जारी नहीं किए जा रहे हैं?डायरेक्टएक्स 10 संसाधन लीक

उत्तर

1

आप here वर्णित अनुसार डायरेक्टएक्स कंट्रोल पैनल उपयोगिता का उपयोग कर सकते हैं। "मेमोरी लीक पर ब्रेक करें" चेक बॉक्स चालू करें, फिर आप यह पता लगाने के लिए "ऑलोकिड तोड़ें" का उपयोग कर सकते हैं कि कौन सा संसाधन मुक्त नहीं हुआ था।

+2

क्या इस काम को DX10 के साथ करने का कोई तरीका है? – yxk

+0

उत्तर डीएक्स 10 के लिए अप्रासंगिक है, केवल डीएक्स 9 पर लागू होता है जब पूछताछकर्ता ने स्पष्ट रूप से DX10 जानकारी का अनुरोध किया था। – IneQuation

6

पहला कदम डायरेक्टएक्स डीबग डीएलएल, via the DirectX Control Panel का उपयोग करना है। (आईआईआरसी, जब आप डायरेक्टएक्स एसडीके स्थापित करते हैं, तो ये एक वैकल्पिक आइटम होते हैं, इसलिए आपको उन्हें इंस्टॉल करने की आवश्यकता हो सकती है।)

जब आप अपना आवेदन अगली बार चलाते हैं, तो डायरेक्टएक्स आपको लीकिंग के बारे में अधिक जानकारी देनी चाहिए।

D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug 
               allocation id ^^^^^^ 

या, इस तरह::

Direct3D9: (WARN) :Memory Address: 00385580 lAllocID=1 dwSize=000047f8, (pid=00000474) 
             allocation id^

बार जब आप एक आवंटन आईडी है, तो आप जब कि आवंटन होता है को तोड़ने के लिए डायरेक्ट बता सकते हैं विशेष रूप से, आप इस तरह की एक पंक्ति के लिए देखने के लिए चाहता हूँ अपने प्रोग्राम में, डायरेक्टएक्स कंट्रोल पैनल में Break on AllocID सेटिंग सेट करके (या उपरोक्त वर्णित रजिस्ट्री कुंजी सेट करके)।

फिर, यह कॉलस्टैक की जांच करने की बात है कि यह देखने के लिए कि डायरेक्टएक्स कॉल क्या शामिल है।

+2

क्या यह विधि डीएक्स 10 के साथ काम करती है? मुझे कोई चेतावनी संदेश नहीं दिख रहा है – yxk

+0

उत्तर डीएक्स 10 के लिए अप्रासंगिक है, केवल डीएक्स 9 पर लागू होता है जब पूछताछकर्ता ने स्पष्ट रूप से DX10 जानकारी का अनुरोध किया था। – IneQuation

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