2010-09-15 14 views
5

पर एक क्रॉस-संकलित win32 एप्लिकेशन पर जीडीबी का उपयोग किया जा सकता है यह एक प्रश्न का मुंह है लेकिन मूल रूप से मैं जानना चाहता हूं कि मैं एक लिनक्स क्रॉस- i686-pc-mingw पर संकलित अनुप्रयोग पर जीडीबी का उपयोग कर सकता हूं या नहीं। संकलक। मैं स्रोत कोड संदर्भ आदि के साथ लक्षित विंडोज़ बॉक्स पर परिणामी प्रोग्राम को डीबग करना चाहता हूं।लक्ष्य प्लेटफ़ॉर्म

क्या यह संभव है और यदि ऐसा है तो मुझे खाते में क्या लेने की आवश्यकता है (यानी, mingw फ़ाइलों का एक ही संस्करण, एक ही binutils, एक ही रिश्तेदार स्रोत कोड के लिए पथ, आदि ...)?

एक चीज जो मुझे थोड़ा फेंकता है वह है जीसीसी और जीडीबी का संस्करण संख्या मेल नहीं लगती है। आप कैसे बताएंगे कि संस्करण संगत होंगे या नहीं?

यदि ये प्रश्न मूर्खतापूर्ण हैं तो यह सिर्फ इसलिए है क्योंकि मैंने जीडीबी का अधिक उपयोग नहीं किया है, यह सिर्फ कुछ है जो मैं करना शुरू करना चाहता हूं इसलिए मैं यह अनुमान लगाने की कोशिश नहीं कर रहा हूं कि क्या टूट गया।

उत्तर

6

हां, आप i686-pc-mingw पर चल रहे निष्पादन योग्य डीबग करने के लिए लिनक्स होस्ट पर जीडीबी का उपयोग करने में सक्षम होना चाहिए।

शब्दावली: i686-pc-mingw सिस्टम आपका लक्ष्य है, Linux सिस्टम आपका होस्ट है।

  • आप पहले से ही एक linux -hosted संकलक जो i686-pc-mingw को लक्षित करता है।
  • आपको अपने लक्ष्य के लिए gdbserver बनाने की आवश्यकता है (अपने क्रॉस-कंपाइलर का उपयोग करके)।
  • आपको gdb (देशी, क्रॉस-कंपाइलर का उपयोग करके) बनाने की भी आवश्यकता है। gdb को --host=x86-linux और --target=i686-pc-mingw के लिए कॉन्फ़िगर करने की आवश्यकता है। यह प्रभावी ढंग से क्रॉस-जीडीबी है - यह लिनक्स पर चलता है, लेकिन डीबग निष्पादन योग्यता को डीबग करता है।

अब gdbserver :0 foo.exe (लक्ष्य पर) चलाते हैं। उस पोर्ट नंबर को मुद्रित करना चाहिए जिस पर gdbserver कनेक्शन सुन रहा है।

gdb foo.exe (होस्ट पर) चलाएं, और target remote <windows-target-host-name>:<gdbserver-port-number> के साथ दूरस्थ लक्ष्य से कनेक्ट करें, और आपको व्यवसाय में होना चाहिए।

पीएस
जीसीसी और जीडीबी पूरी तरह से अलग परियोजनाएं हैं, उनके संस्करणों में एक दूसरे के साथ कुछ भी नहीं है। आप किसी भी अपेक्षाकृत हालिया जीसीसी संस्करण का उपयोग कर जीडीबी बनाने में सक्षम होना चाहिए।

+0

वाह धन्यवाद। मुझे एहसास हुआ कि अगर यह किया जा सकता है तो यह एक जटिल प्रक्रिया होगी लेकिन मुझे लगता है कि मैं जो भी सुझाव दे रहा हूं वह कर सकता हूं। दोनों मशीनों में एक समर्पित 1 जीबीपीएस ईथरनेट है जो उन्हें जोड़ता है और पहले से ही सांबा ड्राइव और एक्स सर्वर के साथ संवाद करता है, इसलिए किसी अन्य सर्वर के माध्यम से संचार करना कोई मुद्दा नहीं है। आपकी स्पष्ट और विस्तृत प्रतिक्रिया के लिए धन्यवाद, खासकर जब शब्दावली भ्रमित हो सकती है। – SpliFF

+0

यदि आपको कोई फर्क नहीं पड़ता है तो मेरे पास फॉलो-अप है। क्या आप मुझे बता सकते हैं कि जीडीबी मूल क्यों होना चाहिए? उसका क्या कारण है? – SpliFF

+0

धन्यवाद। gdb7.9 '--target = i686-pc-mingw32' की आवश्यकता है (अंत में अतिरिक्त ** 32 **)। विंडोज एक्स 64 के लिए भी निर्माण करने के लिए, '--target = i686-pc-mingw32, x86_64-pc-mingw' पास करें –

0

ठीक है यह पता चला है कि यह "मूल" gdb का उपयोग कर संभव है।

असल में, आप देशी gdb.exe (32 या 64 बिट, अपने निष्पादन योग्य से मेल खाने के लिए) डाउनलोड करते हैं, और अपने .exe "डीबग प्रतीकों के साथ संकलित" को पार करते हैं (उदाहरण के लिए, gcc -g source.c a.exe बनाएं)।

फिर अपने लक्ष्य को a.exe कॉपी, यह gdb a.exe की तरह चलाने के लिए और आप विच्छेदबिंदु सेट कर सकते हैं, चर का निरीक्षण, आदि तुम भी स्रोत कोड तक पहुंच चाहते हैं जब आप इसे डिबगिंग रहे हैं, आप अपने स्रोत कोड कॉपी कर सकते हैं अपने विंडोज बॉक्स, फिर उस निर्देशिका के भीतर से gdb a.exe चलाएं जहां आपका स्रोत है, ताकि यह लाइन हो। आपको निश्चित रूप से स्रोत की एक क्रियात्मक प्रतिलिपि/आवश्यकता होगी, लेकिन फिर आपके पास पूर्ण स्रोत के साथ मूल डिबगर होगा।

यदि आप अपने विंडोज़ बॉक्स पर चलते समय "लिनक्स से" डीबगर चलाने के लिए चाहते हैं (एक लाभ वास्तविक स्रोत तक आसान पहुंच है), तो दूसरा उत्तर देखें। मुझे लगता है कि "लिनक्स में" चलाने के लिए वाइन डीबगर का उपयोग करने की संभावना भी है, हालांकि मैंने कभी इस तरह से कोशिश नहीं की है।

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