8

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

क्या VS2008 को तोड़ने के लिए कोई तरीका है जब प्रोग्राम में कोई भी थ्रेड "बाहर निकलें (एक्स);" (एक्स 0 से अलग है) और प्रदर्शन स्रोत?

उत्तर

3

हां, फ़ंक्शन [email protected] फ़ंक्शन में ब्रेकपॉइंट सेट करें, और यह जांचने के लिए *(int*)(ESP+4) == 42 की स्थिति जोड़ें कि बाहर निकलने की स्थिति एक विशेष मान है (42, इस उदाहरण में); 64-बिट प्रोग्राम के लिए, ESP+4 के बजाय ESP+8 का उपयोग करें।

हालांकि, अगर थ्रेड सीधे ExitThread या उसके रैपर को कॉल करने के बजाय अपनी मुख्य थ्रेड प्रक्रिया (सामान्य मामला) से लौटकर निकलता है, तो आपके पास इसके बारे में कोई जानकारी नहीं होगी कि यह क्या थ्रेड था या इसके कारण क्या हुआ बाहर निकलने की स्थिति और थ्रेड आईडी के अलावा बाहर निकलने के लिए।

नोट: फ़ंक्शन का नाम [email protected] एक कार्यान्वयन विवरण है जो विंडोज के भविष्य के संस्करणों में बदल सकता है; [email protected] विंडोज 7 पर नाम है। यह पता लगाने के लिए कि आपके सिस्टम पर वास्तविक क्या है, dumpbin /exports C:\Windows\system32\kernel32.dll चलाएं और ExitThread मानचित्रों को देखें।

+0

मैंने पाया कि '_RtlExitUserThread @ 4' पर ब्रेकपॉइंट सेट करना काम नहीं करता था, क्योंकि फ़ंक्शन को पहचाना नहीं गया था। हालांकि, 'kernel32! ExitUserThread' पर ब्रेकपॉइंट सेट करना काम करता था। –

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