5

में आउटपुट डिबगस्ट्रिंग कॉल डिबगिंग मेरे पास मेरे "एप्लिकेशन" में कुछ "दुष्ट" आउटपुट डिबगस्ट्रिंग कॉल है जो "टी" प्रिंट करता है, लेकिन मैं इसे ढूंढ नहीं सकता।डेल्फी

क्या आउटपुटडिबगस्ट्रिंग-फ़ंक्शन पर ब्रेकपॉइंट सेट करना संभव है और देखें कि इसे कहां से बुलाया जाता है?

मैं डेल्फी 2009

उत्तर

13

कैसे OutputDebugString के लिए कई कॉल अपनी परियोजना में देखते हैं उपयोग कर रहा हूँ? आप उन्हें ढूंढने के लिए "फ़ाइलें खोजें" संवाद का उपयोग कर सकते हैं, और यदि वे बहुत अधिक नहीं हैं, तो कोई समस्या नहीं होनी चाहिए।

अन्यथा, आप - एक खोज का उपयोग कर सकते हैं और सभी OutputDebugString( को raise Exception.Create( के साथ प्रतिस्थापित और प्रतिस्थापित कर सकते हैं।

तुम भी परियोजना में हर दूसरे इकाई द्वारा प्रयोग किया जाता एक इकाई में एक समारोह

procedure OutputDebugString(const Str: string); 
begin 
    raise Exception.Create(Str); 
end; 

लिख सकते हैं। uses सूची में Windows.pas के बाद केवल यह नई इकाई घोषित की गई है, तो यह नया फ़ंक्शन Windows.pas के बजाय उपयोग किया जाएगा।

अद्यतन

हाँ, आप Windows.pas अंदर breakpoints रख सकते हैं। सबसे पहले, अपनी प्रोजेक्ट में, प्रोजेक्ट विकल्प पर जाएं, और डिबगिंग के तहत, "डीसीयू डीबग का उपयोग करें" का चयन करें। तो फिर तुम Windows.pas के पास जाकर लाइन 30,769 पर एक ब्रेकपाइंट जगह कर सकते हैं:

procedure OutputDebugString; external kernel32 name 'OutputDebugStringW'; 
+1

परियोजना और घटकों में बहुत सारे फैल गए .. मुझे यह भी यकीन नहीं है कि संदेश स्वयं या तृतीय पक्ष कोड से आ रहा है या नहीं। – Harriv

+0

हां, डीसीयू डीबग करता है यह करता है। अब मुझे यह पता लगाने की जरूरत है कि कैसे स्थिति निर्धारित करें .. – Harriv

+2

यदि यह आपका कोड नहीं है लेकिन कॉल (अप्रत्यक्ष रूप से) कॉल का उपयोग करने वाली कुछ इकाई आउटपुटडिबगस्ट्रिंग पर भी जा सकती है। – Remko

7
  • आपके आवेदन चलाएँ।
  • इसे रोकें पर रखें।
  • ओपन व्यू/डीबग विंडोज/मॉड्यूल विंडो।
  • kernel32.dll के लिए खोजें। डबल क्लिक करें।
  • आउटपुटडिबगस्ट्रिंग के लिए खोजें। डबल इसे क्लिक करें।
  • सीपीयू विंडो खुलती है। पर पहली बार एक ब्रेकपॉइंट सेट करें।
  • आउटपुट DebugStringW के लिए खोजें। डबल इसे क्लिक करें।
  • सीपीयू विंडो खुलती है। पर पहली बार एक ब्रेकपॉइंट सेट करें।

हो गया।

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