c++ english एक कोड में एक छोटा बदलाव कैसे किया जा सकता है जिसे कभी निष्पादित नहीं किया जा सकता है?




वाक्यांश का अर्थ (4)

मेरे पास बहुत ही अजीब समस्या है और चूंकि मुझे कोड भेजने के लिए संभव नहीं है, मैं समझाने की कोशिश करूंगा।

यह दार्शनिक समस्या की तरह अधिक है - मुझे आशा है कि किसी के पास इस बारे में सोचने के लिए समय / ज्ञान है।

1) मेरे पास project.cpp बिल्कुल समान दिख रहा है:

#include <pthread.h>
#include <unistd.h>
pthread_t pplayer_thread;
void *play(void*);

int main(int argc, char **argv) {
    pthread_create(&pplayer_thread, NULL, play_cb, NULL);
    usleep(5000000);
    return 0;
}

2) pplayer.cpp इस तरह से कुछ देख:

...
void *play_cb(void *arg) {
    // this starts movie using gstreamer and exits thread
}   
...

3) इस तरह से कुछ की तलाश में __संक्रमित _from_main.cpp;

...
extern MyClass *myObj; // this is included from .h file
...
MyClass *myObj = NULL;
...
some_function() {
    ...
    myObj = MyClass::createNew(args);
    ...
}
...

यह सब विभिन्न अन्य पुस्तकालयों और कचरे के टन के साथ जुड़ा हुआ है, लेकिन यह मूल रूप से महत्वपूर्ण है जो महत्वपूर्ण है।

-> समस्या :

जब मैं इसे चलाता हूँ, मुझे 5 सेकंड के लिए gstreamer का उपयोग करके विंडो खेल फिल्म क्लिप देखना चाहिए -> लेकिन मैं केवल ध्वनि सुनता हूँ!

-> अजीब बात है :

जब मैं रेखा टिप्पणी करता हूँ:

myObj = MyClass::createNew(args);

और फिर से चलाएं -> मैं जीस्ट्रीमर विंडो को भी देखता हूं (सब कुछ ठीक है)

-> नोट्स :

इसके साथ ऐसा कुछ हो सकता है:

  • MyClass की प्रक्रिया और प्रकृति को जोड़ने और इसका मूल वर्ग (मेरा सबसे अच्छा अनुमान)
  • "स्थिर" कीवर्ड
  • "बाहरी" कीवर्ड
  • सी और सी + + मिश्रण

-> मैं एक बार फिर पूछूंगा :

एक कोड में एक छोटा बदलाव कैसे किया जा सकता है जिसे कभी निष्पादित नहीं किया जा सकता है?

(कृपया सहायता कीजिए)


सबसे अधिक संभवतः स्टैकेवरफ्लो के साथ ऐसा करना पड़ता है आपके पास ऐसी कोई चीज़ है जो कुछ बुरी चीज करती है, चीजों को सीमा या किसी अन्य अपरिभाषित व्यवहार से संबोधित करती है और यह केवल कुछ विशिष्ट विन्यास में ही (या नहीं) ट्रिगर करता है एक वैरिएबल घोषणा जोड़ने या हटाने से ऐसा कुछ हो सकता है


अपना उदाहरण कोड देना समस्या के साथ वास्तविक कोड नहीं है ....

मुख्य एकमात्र प्रवेश बिंदु नहीं है, जहां कोड निष्पादन शुरू कर सकता है, कोई भी वैश्विक ऑब्जेक्ट अपने कन्स्ट्रक्टर को निष्पादित करेगा जो सभी प्रकार के कोड को बंद कर सकते हैं। तो शायद कुछ है कि आप कैसे काटते हैं

या तो यह डिबग करें, या, शायद, कंसोल में संदेशों को बाहर करने के लिए कौन से पथ निष्पादित हो रहे हैं यह देखने दें।


क्या आपका धागा myObj का उपयोग कर रहा है? यदि ऐसा है तो MYObj को NULL सेट करने और इसे दोबारा आवंटित करने के बीच एक दौड़ की स्थिति हो सकती है।


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

आपके मामले में, उस विधि के अंतर्निहित साइड इफेक्ट्स से कुछ भी हो सकता है, जब मेमोरी से संबंधित त्रुटि दिखाई दे रही है, जब निष्पादन योग्य कोड का लेआउट बदलता है

आपको अपने कोड का पता लगाने के लिए डीबगर का उपयोग करना चाहिए। सुनिश्चित करें कि माना जाता है कि निष्पादित कोड से कुछ भी वास्तव में निष्पादित नहीं किया गया है। आपका कोड कोड पथ दर्ज कर सकता है जिसे आप गलती से लगता है कि अनुपलब्ध है, या आपके प्रोग्राम के कुछ अन्य भाग (जैसे एक स्थिर अक्रियक) हो सकता है।

Valgrind भी उपयोगी हो सकता है यदि यह आपके प्लेटफ़ॉर्म के लिए उपलब्ध है - यह स्मृति-संबंधित त्रुटियों की एक बहुत कुछ का पता लगाएगा, जैसे मुझे आपके हाथों पर संदेह है। दुर्भाग्य से यह स्टैक में त्रुटियों का पता लगाने में बहुत अच्छा नहीं है - आपका कंपाइलर वहां मदद करने में सक्षम हो सकता है, यद्यपि।





gstreamer