2012-01-24 7 views
5

मुझे डेल्फी 6 डायरेक्टशो डीएलएल में नहीं होने वाले ब्रेकपॉइंट्स के साथ एक बड़ी समस्या थी। मैं आईडीई में डीएलएल (एएक्स) लोड करूंगा और इसे ग्राफ एडिट के साथ होस्ट प्रोग्राम के रूप में चलाऊंगा और ब्रेकपॉइंट्स में से कोई भी ट्रिगर नहीं करेगा। मैंने फास्टएमएम 4 डीएलएल को प्रोजेक्ट डायरेक्टरी में ले जाने की कोशिश की, फास्टएमएम 4 को पूरी तरह हटा दिया, डीबग डीसीयू चालू और बंद कर दिया, प्रोजेक्ट निर्देशिकाओं को साफ किया, डीएलएल को पंजीकरण और पुन: पंजीकृत कर दिया, जो कुछ भी मैं सोच सकता था। कुछ भी काम नहीं किया। हर बार जब मैंने मेजबान कार्यक्रम चलाया तो मैंने घटना दर्शक में "डीबग जानकारी" संदेश के साथ अपना डीएलएल लोड देखा। फिर एक हताश गूगल खोज में मुझे लगता है कि "दूरस्थ डिबग प्रतीकों" लिंकर विकल्प की कोशिश कर की सिफारिश की सी ++ बिल्डर के लिए एक पोस्ट पाया: -> विकल्प -> लिंकर (टैब) -डीएलएल ब्रेकपॉइंट्स को "रिमोट डीबग प्रतीकों" विकल्प के साथ नहीं मारा जा रहा है, क्यों और कोई सुरक्षा उन लोगों के साथ जोखिम रखती है?

परियोजना> Exe और DLL विकल्प (समूह बॉक्स) -> "दूरस्थ डीबग चिह्न शामिल करें" (यह जाँच)

अचानक मेरी breakpoints मारा जा रहा शुरू कर दिया। यहां मेरे प्रश्न हैं:

1) यह क्यों काम किया? क्या यह विकल्प के कारण है या क्योंकि इस विकल्प ने कुछ अन्य कंपाइलर/लिंकर ऑपरेशन को ट्रिगर किया है जो निश्चित चीजें हैं? मैं जानना चाहता हूं कि जब मैं फिर से होता हूं तो भविष्य में मैं इस समस्या को विश्वसनीय रूप से ठीक कर सकता हूं।

2) रिमोट डीबग प्रतीक कुछ शत्रु प्रोग्रामर मेरे प्रोग्राम को गहरे ट्रेस करने के लिए उपयोग कर सकते हैं? दूसरे शब्दों में, क्या वे चारों ओर झूठ बोलने पर सुरक्षा जोखिम हैं?

+0

संघर्ष न करें, स्रोत कोड प्रकाशित करें। – OnTheFly

+0

डेल्फी का क्या संस्करण? डीएलएल डीबग करने में पुराने डेल्फी इतने अच्छे नहीं हैं। मुझे कभी-कभी मेजबान exe को DLL के समान फ़ोल्डर में रखना आवश्यक होता है। यह निश्चित रूप से मानक डीबग विकल्पों के साथ डीएलएल संकलित पर्याप्त होना चाहिए। रिमोट प्रतीकों की कोई ज़रूरत नहीं है। –

+0

@ डेविड हेफरन। डेल्फी 6. –

उत्तर

5

1) यह विकल्प के कारण था। डीबग प्रतीक जानकारी के बिना, आपके आईडीई को पता नहीं है कि अपने ब्रेकपॉइंट्स कहां सेट करें। डीबग डीसीयू के पास इसके साथ कुछ लेना देना नहीं है - वह विकल्प वीसीएल डीसीयू के एक अलग सेट में लिंक करता है जिसमें डीबग जानकारी होती है ताकि आप ब्रेकपॉइंट्स सेट कर सकें। सहायक संकेत: डेल्फी के संस्करण के आधार पर, उन डीसीयू वास्तव में, हमेशा अपने डीबग प्रतीकों के साथ समन्वयित नहीं होते हैं।

2) डीबग प्रतीकों/मानचित्र फ़ाइलों को रिलीज में बाहर नहीं जाना चाहिए, खासकर यदि कार्यक्रम द्वारा संचालित जानकारी किसी भी तरह से संवेदनशील है। यह किसी भी प्रोग्रामिंग भाषा के लिए चला जाता है।

यदि आपको रिलीज के बाद अपने सॉफ़्टवेयर का निदान करने की क्षमता की आवश्यकता है, तो अपवाद, त्रुटि, और दावा प्रबंधन शामिल करें जो आपको लॉग से बग ट्राय करने के लिए पर्याप्त जानकारी देता है।

+0

लेकिन मेरी सभी अन्य परियोजनाएं * रिमोट * डीबग प्रतीकों के बिना काम करती हैं। मैंने डीबग प्रतीकों ("डीबग जानकारी") को उनके साथ शामिल किया है, लेकिन रिमोट डीबग प्रतीकों को नहीं मिला है जो कि डीएलएल के लिए काम कर रही चीजें हैं। साथ ही, क्या मैं आपके उत्तर से अनुमान लगा सकता हूं कि मैडएक्ससेप्ट और जेवीसीएल स्टैक ट्रेस जैसे टूल्स * मौजूद नहीं हैं * तब मौजूद डीबग प्रतीकों पर निर्भर हैं? मैं जेवीसीएल स्टैक ट्रेस (जेडीबीजी) प्रतीकों के साथ अपना कोड जारी करना पसंद करूंगा ताकि एक अपवाद होने पर मैं अपने अपवादों के साथ एक स्टैक ट्रेस प्राप्त कर सकूं। –

+1

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

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