2009-10-19 11 views
8

मेरे पास एक ग्राहक है जिसने मुझे बताया है कि मेरा प्रोग्राम (सरल उपयोगकर्ता-भूमि कार्यक्रम, ड्राइवर नहीं) ब्लू स्क्रीन ऑफ डेथ (बीएसओडी) के साथ अपने सिस्टम को क्रैश कर रहा है। उनका कहना है कि उन्होंने कभी भी दूसरे कार्यक्रम के साथ सामना नहीं किया है और वह इसे आसानी से पुन: उत्पन्न कर सकता है।बीएसओडी के लिए एक साधारण कार्यक्रम जिम्मेदार हो सकता है?

बीएसओडी प्रकार CRITICAL_OBJECT_TERMINATION (0x000000F4) ऑब्जेक्ट प्रकार 0x3 (प्रक्रिया) के साथ की है: एक प्रक्रिया या प्रणाली आपरेशन के लिए महत्वपूर्ण अप्रत्याशित रूप से बाहर या समाप्त कर दिया गया है थ्रेड।

क्या एक साधारण कार्यक्रम बीएसओडी (यहां तक ​​कि Vista पर भी) के लिए ज़िम्मेदार हो सकता है या क्या उसे हार्डवेयर या ओएस इंस्टॉलेशन की जांच करनी चाहिए?

+0

कौन-सी भाषा में लिखा है का कारण बनता है? –

+0

यह एक सी ++ प्रोग्राम wxWidgets टूलकिट का उपयोग है। – math

+0

@math: यह * * wxWidgets कि विन एपीआई के कुछ समस्याओं दे रहा है में एक बग हो सकता है। – voyager

उत्तर

5

उपयोगकर्ता-अंतरिक्ष प्रोग्राम के साथ बीएसओडी का कारण बनने का सबसे आसान तरीका है (afaik) kill the Windows subsystem process (csrss.exe)। इसे दोषपूर्ण हार्डवेयर और कर्नेल या ड्राइवर में बग की आवश्यकता नहीं है, इसे केवल प्रशासक विशेषाधिकारों की आवश्यकता है ।

आपका कोड वास्तव में क्या कर रहा है? त्रुटि संदेश ("सिस्टम ऑपरेशन के लिए महत्वपूर्ण एक प्रक्रिया या थ्रेड अप्रत्याशित रूप से बाहर निकला या समाप्त हो गया है।") एक आवश्यक सिस्टम प्रक्रियाओं में से एक की तरह लगता है। हो सकता है कि आप एक प्रक्रिया को मार रहे हों और अनजाने में गलत प्रक्रिया मिली?

यदि किसी भी तरह से आप उस ग्राहक से मेमोरी डंप प्राप्त करने का प्रयास कर सकते हैं। विंडोज के लिए डिबगिंग टूल्स का उपयोग करके आप here वर्णित डंप का विश्लेषण कर सकते हैं।

विंडोज doing so करने से रोक नहीं करता है, क्योंकि यह "keeps administrators in control of their computer"। तो यह डिजाइन द्वारा है और एक बग नहीं है। रेमंड के लेख पढ़ें और आप देखेंगे क्यों।

10

सिर्फ इसलिए कि आपका प्रोग्राम चालक नहीं है इसका मतलब यह नहीं है कि यह ड्राइवर का उपयोग नहीं करेगा।

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

+0

"सिद्धांत में"? विंडोज़ का वर्णन करते समय शायद एक शब्द बहुत मजबूत हो सकता है। मुझे नहीं लगता कि एक असली विज्ञान है जो विंडोज के बारे में किसी भी सिद्धांत को पोस्ट करता है। मुझे लगता है कि यह एक आशा है कि माइक्रोसॉफ्ट harbors। मुझे लगता है कि सही शब्द "उम्मीदपूर्वक" हो सकता है। –

+9

एसएलॉट: मुझे लगता है कि उसका मतलब क्या था कि x86 संरक्षित मोड में, रिंग 3 रिंग 0 को नीचे ले जाने में सक्षम नहीं होना चाहिए। इसका विंडोज़ से कोई लेना देना नहीं है। –

4

संक्षिप्त उत्तर हाँ है। लंबा जवाब इस बात पर निर्भर करता है कि आप क्या कर रहे हैं और यह कैसे करता है?

3

अच्छा, हाँ यह कर सकता है - लेकिन कई अलग-अलग कारणों से।

यही कारण है कि हम विभिन्न मशीनों, ऑपरेटिंग सिस्टम, हार्डवेयर आदि पर परीक्षण है ..

आप अपने कार्यक्रम के लिए कुछ आवश्यकताओं स्थापित करने और अपने उपयोगकर्ता उन्हें पीछा कर रहा है है?

4

आम तौर पर, यह नहीं होना चाहिए। यदि ऐसा है, वहाँ या तो

  • एक Windows कर्नेल में बग (संभव है, लेकिन बहुत संभावना नहीं)
  • एक डिवाइस आपके प्रोग्राम का उपयोग करता है में एक डिवाइस ड्राइवर में बग (जरूरी नहीं, यह काफी जटिल हो सकता है किया जाना चाहिए)
  • हार्डवेयर

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

+0

+1: विंडोज़ में एक बग? वास्तव में? इसके बारे में किसने सोचा होगा? –

+4

@ एसएलॉट: आश्चर्यजनक रूप से और उन सभी विंडोज चुटकुले के बावजूद, लेकिन कुछ बीएसओडी मैंने देखा है क्योंकि विंडोज एक्सपी सभी को तीसरे पक्ष के उत्पादों या हार्डवेयर दोषों के लिए खोजा जा सकता है। –

+0

@divo: अच्छा बिंदु। हालांकि, जब कोई तृतीय पक्ष उत्पाद विंडोज को क्रैश कर सकता है, तो मुझे संदेह है कि तीसरे पक्ष के घटक के बाहर कहीं भी एक बग है। –

1

आप इसे अपने आप को नकल नहीं कर सकते हैं, और अपने कार्यक्रम है कि सिस्टम के हार्डवेयर की स्थिरता के बारे

  • थोड़ा suspicous चलाने के लिए व्यवस्थापक की जरूरत नहीं है, मैं होगा
  • वायरस/उस प्रणाली की मैलवेयर स्थिति।

आप ग्राहक बॉक्स को शारीरिक पहुँच प्राप्त कर सकते हैं, यह एक अप-टू-डेट स्कैनर के साथ एक पूर्ण वायरस स्कैन चल रहा है, और उस पर एक पूर्ण memtest चल रहा लायक हो सकता है।

मैं एक बार है कि, स्थिर लग रहा था कि एक certian कुछ कार्यक्रमों यह पर चलने नहीं होगा (और कभी कभी बॉक्स दुर्घटना होगा) को छोड़कर एक प्रणाली था। मेमटेस्ट ने दिखाया कि मेरी रैम में कुछ खराब बिट्स थे, लेकिन वे higer सिम्स में थे, इसलिए अगर किसी प्रोग्राम ने बहुत सी रैम का उपयोग करने की कोशिश की तो उन्हें केवल तभी पहुंचा दिया गया।

+0

हाँ, यह हार्डवेयर विफलता हो सकती है। –

1

नहीं है, और यह बहुत परिभाषा से ज्यादा है। सबसे बुरी बात यह है कि आप कह सकते हैं कि उपयोगकर्ता-भूमि अनुप्रयोग में Windows बग या ड्राइवर बग "ट्रिगर" हो सकता है। लेकिन एक आधुनिक डेस्कटॉप ऑपरेटिंग सिस्टम अपनी ईमानदारी के लिए पूरी तरह उत्तरदायी है; एक बीएसओडी उस अखंडता की विफलता है। इसलिए ओएस जिम्मेदार है, और केवल ओएस।

(एक बीएसओडी बग कि अकेले अपने आवेदन को प्रकट कर सके का उदाहरण: एक वायरस स्कैनर एक ड्राइवर के रूप में लागू, क्रैश क्षेत्र 0xFFFFFFFF, एक क्षेत्र है कि यह एक मशीन पर बस में से एक DLL को रोकने के लिए होता है से एक फ़ाइल को क्रियान्वित है कि आपके आवेदन)

+0

मैं नहीं कहूंगा कि ओएस केवल जिम्मेदार है। निश्चित रूप से ओएस को एक गैर-विशेषाधिकार प्राप्त ऐप से अनचाहे होना चाहिए, लेकिन हमें वास्तविक जीवन ऑपरेटिंग सिस्टम से निपटना होगा। –

+0

ओएस बग एक निर्विवाद तथ्य है लेकिन यह अवलोकन जिम्मेदारी से कुछ भी नहीं लेता है। – MSalters

-1

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

एक और समस्या है, तो उपयोगकर्ता एक ही संसाधनों अपने अनुप्रयोग (डेटाबेस, हार्डवेयर, सॉकेट, आदि) का उपयोग कर रहा का उपयोग करने की कोशिश कर रहा है हो सकता है। बीएसओडी होने पर उसे किस ऐप का उपयोग कर रहा है उसके बारे में उससे पूछें।

एक वायरस खारिज नहीं किया जा सकता है।

+0

मजेदार कैसे आठ साल बाद एक नकारात्मक वोट इकट्ठा कर सकता है (मैं तब बहुत छोटा था!) ​​ –

-1

यहाँ एक सरल सी # कमांड लाइन प्रोग्राम है जो एक बीएसओडी

using System; 
using System.Diagnostics; 
class program 
{ 
    static void Main() 
    { 
     ProcessStartInfo proc = new ProcessStartInfo(); 
     proc.FileName = "cmd.exe"; 
     proc.Arguments = "/c wmic process where name='csrss.exe' delete"; 
     proc.Verb = "runas"; 
     Process.Start(proc); 
    } 
} 
+0

यह आठ साल पहले स्वीकार किए गए उत्तर से पहले ही उल्लेख किया गया था। – duskwuff

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