2013-05-01 7 views
6

डीबग कैसे करें मुझे डीबग-मोड में टेस्टकेस चलाने पर कोई समस्या है: मुझे संदेश के साथ एक पॉप-अप-बॉक्स मिलता है "संदेश में 0x7c812fd3 पर अनचाहे अपवाद: 0xE0000003: 0xe0000003।"। free.c में कोड टूट जाता है:सी ++ अनचाहे अपवाद -

void __cdecl _free_base (void * pBlock) 
{ 
    int retval = 0; 

    if (pBlock == NULL) 
     return; 

    RTCCALLBACK(_RTC_Free_hook, (pBlock, 0)); 

    retval = HeapFree(_crtheap, 0, pBlock); 
    if (retval == 0) 
    { 
     errno = _get_errno_from_oserr(GetLastError()); 
    } 
} 
लाइन पर

"retval = ..." के साथ _crtheap = 0x00df0000 और pBlock = 0x967c93d3। पर कॉल स्टैक टूट जाता है और कॉल स्टैक में और नीचे एक और प्रविष्टि "kernel32.dll 7c812fd3()!": "!> msvcr100d.dll _free_base (शून्य * pBlock = 0x967c93d3) लाइन 50 + 0x13 बाइट्स"।

मैं काफ़ी googled है और समस्या स्मृति severel बार मुक्त कराने से आ सकते हैं। इस अस्पष्ट और गन्दा विवरण के बावजूद कोई भी समस्या का पता लगाने के लिए संकेत दे सकता है? और शायद इसे कैसे ठीक किया जाए?

क्या मुझे थोड़ी अजीब हमलों है कि मैं इस अनुभव नहीं है जब रिलीज मोड में परीक्षण चल रहा है ...

सधन्यवाद, Svend

+2

डिबग मोड केवल त्रुटियों के लिए सामान्य कारण uninitialised चर है। हो सकता है कि आप एक पॉइंटर को मुक्त कर रहे हों जिसे कभी भी मूल्य नहीं दिया गया है। – john

+4

रिलीज मोड में इन चेकों नहीं किया जाता है, इसलिए तुम क्यों केवल (समस्या अभी भी रिलीज में मौजूद है, तो आप सिर्फ भाग्यशाली है कि यह किसी भी आगे कीड़े पैदा करने के लिए प्रकट नहीं होता है मिलता है) डिबग मोड में सूचित किया जाए। जब तक आप एक फ़ंक्शन को प्राप्त नहीं करते हैं, तब तक स्टैक ट्रेस पर जाएं, और यह पता लगाने का प्रयास करें कि क्या गलत है (उदा। डबल-फ्री या उस पते को मुक्त करना जो वास्तव में आवंटित नहीं किया गया है)। – Cameron

+0

क्या आप थोड़ा और विवरण दे सकते हैं? किस प्रकार की वस्तु मुक्त हो रही है? –

उत्तर

-2

आप दृश्य के तहत इन testcases भागने की कोशिश की है स्टूडियो डीबगर? डीबगर को इस अपवाद को पकड़ना चाहिए और आप कॉल स्टैक को सत्यापित कर सकते हैं और पता लगा सकते हैं कि समस्या कहां है।

+0

अपवाद '_free_base' में हो रहा है, वह पहले से ही यह जानता है। लेकिन डीबगर इस मुद्दे को नहीं पकड़ रहा है (यानी पहले भ्रष्टाचार का भ्रष्टाचार) –

+0

यदि ऐसा है तो उसे केवल डीबगर का उपयोग करना चाहिए और सभी टेस्टकेस कोड के माध्यम से कदम उठाना चाहिए और अपवाद उत्पन्न करने वाले भाग का पता लगाना चाहिए। – Zuljin

+0

वाह। इस प्रकार की बेवकूफ सलाह केवल उस व्यक्ति से आ सकती है जिसने कभी-कभी एक-एक-एक दूरी की बग का अनुभव नहीं किया है। मुझे तुमसे ईर्ष्या है। –

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