2011-09-18 21 views
6

मेरे पास एसी # (.net 4.0) विनफॉर्म एप्लिकेशन है जो एक एक्सपी एसपी 3 पर दिन में 8 घंटे, हर दिन बहुत अधिक चलता है। यह ज्यादातर समय ठीक काम करता है , कभी-कभी महीनों के लिए। फिर ऐसा लगता है कि एक खराब जादू में, और दिन में एक बार, लगातार कुछ दिनों के लिए, कई बार, एक प्रवेश उल्लंघन अपवाद आता है। मैंने डंप फ़ाइल को देखने की कोशिश की है, और स्टैक को देखने के लिए एक्सेस उल्लंघन अपवाद को पकड़ लिया है; किसी भी तरह, मैं बहुत ज्यादा एक ही ढेर मिलती है:एक्सेस उल्लंघन: संरक्षित मेमोरी को पढ़ने या लिखने का प्रयास

Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 
    at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
    at System.Windows.Forms.NativeWindow.DefWndProc(Message& m) 
    at System.Windows.Forms.ToolTip.WndProc(Message& msg) 
    at System.Windows.Forms.ToolTip.ToolTipNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.Run(Form mainForm) 

मैं इस फिक्सिंग क्योंकि स्टैक ट्रेस बहुत उपयोगी नहीं है एक बहुत ही मुश्किल समय हो रही है। सबसे पहले, मुझे यह भी यकीन नहीं है कि क्या मैं स्टैक ट्रेस पर भरोसा कर सकता हूं: क्या प्रोग्राम वहां जाता है (ऐसा लगता है कि यह कुछ टूलटिप प्रदर्शित करने की कोशिश कर रहा है, जो निश्चित रूप से संभव है) क्योंकि स्मृति पहले से ही दूषित है, या यदि प्रोग्राम वास्तव में वैध होना चाहिए वहां, लेकिन कुछ डेटा मेमोरी दूषित है। दूसरा, यह मानते हुए कि स्टैक ट्रेस सही और भरोसेमंद है, मुझे यह पता लगाने का कोई तरीका नहीं दिख रहा है कि स्मृति को दूषित कर रहा है ... हम प्रवेश उल्लंघन को ट्रिगर करने के लिए कुछ भी नहीं कर रहे हैं ... एप्लिकेशन लॉग कोई भी नहीं दिखाता है इससे पहले अन्य पकड़े गए अपवाद ... ईवेंट लॉग एक ही समय में प्रवेश उल्लंघन के रूप में कोई प्रविष्टियां नहीं दिखाते हैं ... इस पर निदान करने के तरीके पर कोई संकेत?

अद्यतन 2011-10-11: मैं पहले ही अपवाद को पकड़ रहा हूं, लेकिन आवेदन के आसपास। रुन() विधि। उस समय ऐसा लगता है कि बहुत कुछ करने में बहुत देर हो चुकी है। अगर दोषपूर्ण हार्डवेयर/ड्राइवर के कारण यह अपवाद हो रहा है और यह संकेत नहीं देता है कि एप्लिकेशन की स्मृति दूषित है - क्या कोई और जगह होगी जहां मैं अपवाद पकड़ सकता हूं (और इसे प्रदर्शित करता हूं, लेकिन फिर एप्लिकेशन को जारी रखने दें)?

अपडेट 2012-03-04: मुझे एक बार फिर अपवाद मिला, इस बार काफी मामूली रूप प्रदर्शित करने के बाद (केवल एक टेक्स्टबॉक्स और एक ठीक बटन है)। मैं TextBox.AppendText() का उपयोग कर रहा था। मैं बस एक ही समय में इस comment ब्राउज़ करने के लिए ऐसा हुआ। AppendText() समस्या उत्पन्न कर सकता है? जब 'मूल' पहुंच उल्लंघन होता है, तो वे एक ऐसे फॉर्म को प्रदर्शित करने के बाद खुश होते हैं जिसमें एक Richtextbox होता है जिस पर मैं AppendText() को भी कॉल करता हूं। साज़िश का गहरा जाना!

अपडेट 2012-03-06: मैंने AppendText को हटा दिया और बस टेक्स्टबॉक्स का उपयोग किया। इसके बाद = लेकिन मुझे आज फिर से उल्लंघन उल्लंघन अपवाद मिला। इस प्रकार, AppendText अपराधी प्रतीत नहीं होता है। इसके अलावा, अपवाद एक बार बॉक्स 7 पर चल रहा है, विंडोज 7 चला रहा है। इस प्रकार, ऐसा लगता है कि अपवाद विंडोज XP के लिए विशिष्ट नहीं है, या अन्य कंप्यूटर (जैसे स्मृति समस्या)।

+1

आप अपने अनुप्रयोग में किसी भी PInvoke कर रहे हैं? यदि आप हैं, तो यह देखने के लिए लायक हो सकता है कि कोड की चोटी (यदि संभव हो) यह देखने के लिए कि क्या यह कोई दुविधा है या नहीं। इसके अलावा इस http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/6adca20b-649f-41a4-8fa1-09534882d76c/ विशेष रूप से "जेम्स Kovac" और "DejanR" से जवाब पर एक नजर है । डीबगिंग अनुकूलन के साथ कुछ करने के लिए हो सकता है। – Raghu

उत्तर

5

मैं this post लिए इस मुद्दे को धन्यवाद नकल करने में सक्षम था। तो, DataGridView.ShowCellToolTips = false का उपयोग करके सभी डेटाट्रिडव्यू में सभी टूलटिप्स को अक्षम करने के लिए एक कार्य-आस-पास दिखाई देता है; हालांकि, यह आदर्श नहीं है। A better work-around

Application.EnableVisualStyles(); 

before any controls are created in the app कॉल करने के लिए है।

मैंने पुष्टि की है कि समस्या तब होती है जब डेटाग्रिड व्यू कस्टम टूलटिप्स (सेलटूलटिपटेक्स्टेड के साथ) प्रदर्शित कर रहा है या नहीं।

0

यह सुनिश्चित नहीं है कि यह कोई मदद मिलेगी लेकिन यह समस्या नेट और पुराने माइक्रोसॉफ्ट के पुराने संस्करणों में भी आम है, इसके लिए कुछ सुधार भी जारी किए गए हैं।

प्रारंभिक ठीक से एक के रूप में इस प्रकार है,

http://support.microsoft.com/kb/923028

यहाँ एक और एक है था। http://support.microsoft.com/kb/975954

+0

धन्यवाद। हॉटफिक्स 923,028 के लिए, मैं एक त्रुटि है कि कहते हैं, "उन्नयन पैच Windows इंस्टालर सेवा द्वारा स्थापित नहीं किया जा सकता है, क्योंकि कार्यक्रम उन्नत करने की याद आ रही हो सकता है या उन्नयन पैच कार्यक्रम का एक अलग संस्करण अद्यतन कर सकते हैं मिलता है। सत्यापित करें कि कार्यक्रम के लिए अपग्रेड किया जाना आपके कंप्यूटर पर मौजूद है और आपके पास सही अपग्रेड पैच है। " 975954 सफलतापूर्वक स्थापित किया गया है। चलो देखते हैं कि यह काम करता है! – Jimmy

+0

आज सुबह एक और पहुँच उल्लंघन ही मिला है -। इस प्रकार, पुष्टि की है कि हॉटफिक्स 975,954 समस्या का समाधान नहीं :( – Jimmy

0

सभी जानकारी के बाद से/ठीक पता लगाने के लिए आसान नहीं है यही कारण है कि नहीं बल्कि "सामान्य" है तो इन कुछ सामान्य संकेत दिए गए हैं:

  • यह हमेशा एक ही मशीन पर होता है?
    यदि हाँ, तो इसके लायक मशीन की जांच करने के (स्मृति परीक्षण आदि एक बूट करने योग्य linux सीडी या इसी तरह से चलाने) और/या यदि वह परिवर्तित देखने के लिए किसी दूसरी मशीन पर इसे चलाने ... हो सकता है

  • एक टूलटिप प्रदर्शित करते समय अपवाद होता है ... ग्राफ़िक कार्ड ड्राइवर के साथ समस्या का संकेत हो सकता है ...एक अलग ड्राइवर और/या विभिन्न स्क्रीन रिज़ॉल्यूशन आदि चुनें और देखें कि

  • क्या आप कुछ तृतीय-पक्ष पुस्तकालयों का उपयोग कर रहे हैं?
    यदि ऐसा है तो उन्हें अप्रबंधित स्मृति समस्याओं के लिए जांचने के लिए लायक हो सकता है (उदाहरण के लिए स्मृति प्रोफाइलर ...)। विक्रेताओं के साथ जांचें कि क्या नए संस्करण हैं आदि
    मैंने कुछ समय पहले ऐसा ही किया था और यह कुछ तृतीय पक्ष लाइब्रेरी (मेमोरी प्रोफाइलर के माध्यम से निदान) के अंदर एक अप्रबंधित स्मृति रिसाव साबित हुआ ... मैं जांचता हूं विक्रेता और जो सुचारू रूप से जब से चलाता है एक निश्चित संस्करण मिल गया ...

+0

ड्राइवर अपडेट किया गया पिछले सप्ताह हम दुर्घटनाग्रस्त बिना एक ठोस सप्ताह था, और उसके बाद bam आज दोपहर :( – Jimmy

+0

दुर्घटना एक बिल्कुल के रूप में! अंतिम उपाय बात: कभी कभी यह हर 24 घंटों या पुन: प्रारंभ करने में मदद तो ... – Yahia

+0

हाँ, सॉफ्टवेयर में ही बंद दैनिक है, और कंप्यूटर साप्ताहिक रीबूट ... मदद करने के लिए (यानी, दुर्घटनाओं सोमवार को हो सकता है, नहीं लगता है के बाद सप्ताह के अंत में रिबूटिंग) – Jimmy

3

जब एक सी dll के लिए एक तीसरी पार्टी सी # आवरण में बुला मैं यह समस्या देखी है। मैंने उपयोगिता editbin.exe/NXCOMPAT का उपयोग करके सी # डीएल के लिए डीईपी अक्षम कर दिया: NO {dll name} और ऐसा लगता है कि इस मुद्दे को ठीक किया गया है।

मैं सीएलआर को अतिरिक्त जांच करनी चाहिए जब डीईपी चालू हो और सी डीएल कुछ ऐसा कर रहा हो जो सीएलआर स्मृति भ्रष्टाचार के रूप में समझा जाता है और इस त्रुटि को फेंकता है।

आप इस बारे में और अधिक पढ़ सकते हैं, http://blogs.msdn.com/b/ed_maurer/archive/2007/12/14/nxcompat-and-the-c-compiler.aspx

2

हमें हाल ही में TextBox.AppendText() करते समय AccessViolationException भी मिला है। समस्या को पुन: पेश करने की कोशिश करने के बाद हमें एहसास हुआ कि टेक्स्टबॉक्स समस्या नहीं थी। हमारे मामले में यह ड्रैग-एंड-ड्रॉप सुविधा थी।

using System; 
using System.Windows.Forms; 

namespace TestTextBoxAccessViolation { 
    public partial class Form1 : Form { 


     public Form1() { 
      InitializeComponent(); 
     } 

     private void Form1_DragEnter(object sender, DragEventArgs e) { 
      e.Effect = DragDropEffects.Copy; 
     } 

     private void Form1_DragDrop(object sender, DragEventArgs e) { 
      e.Data.GetData("DragImageBits"); 
      Form1 f = new Form1(); 
      f.textBox1.Text = "Keep resizing this window and you'll get an AccessViolationException after a while"; 
      f.Show(); 
     } 
    } 
} 

निष्कर्ष:: "DragImageBits" का प्रयोग न करें

यहाँ एक न्यूनतम परियोजना (किसी पाठ बॉक्स के साथ एक फॉर्म) कि अपवाद पुन: पेश करेंगे।

0

मैं ओपी के समान व्यवहार से पीड़ित था। मैंने सॉफ्टवेयर के एक टुकड़े को संशोधित किया था और दो पीएनवोक विधियों को जोड़ा (यूआई में सुधार करने के लिए)। दुर्भाग्यवश, मैंने ओपी के समान संदेश प्राप्त करना शुरू कर दिया। जवाबों को देखते हुए, मुझे राजा हिंदुस्तान की मिली। दो PInvoke विधियों पर टिप्पणी करने पर, समस्या गायब हो गई प्रतीत होती है।

1

मुझे पता चला कि यह समस्या न केवल WPF में, बल्कि WinForms के लिए होती है (क्रैश)। मेरी समस्या OpenFileDialog से संबंधित थी। यह समस्या के स्रोत क्या है कहना मुश्किल है, लेकिन अभी भी यह प्रतीत होता है OpenFileDialog से संबंधित माइक्रोसॉफ्ट dll कीड़े है कि (मेरे लिए, यह ComDlg32.dll था)

एक ही रास्ता मैं ShowDialog (कह सकते हैं) समारोह इसे घटना में लपेटना था और

this.BeginInvoke(
     new Action<YourObject, EventArgs>(YourObject_FileDialogOpened), new object[] 
                 { YourObjectInstance, e }); 

जहां "यह" एक नियंत्रण है (उदाहरण के लिए, फॉर्म)।

BeginInvoke (...) अनुदान जो आप कॉल करते हैं, वे उचित तरीके से प्रक्रिया करेंगे।अगर आप बटन क्लिक करें घटना या किसी अन्य समान परिदृश्य के अंतर्गत OpenFileDialog की कॉल का उपयोग

समस्या दिखाई नहीं देगा।