2013-02-18 19 views
7

मैं अपने सी ++ एप्लिकेशन के डेवलपर वितरण में डीबगिंग सक्षम करने के लिए पीडीबी फाइलों को स्थापित करने के लिए एक सीएमकेई कमांड का उपयोग कर रहा हूं। आदेश के रूप में नीचे है:पीडीबी फाइलें cmake इंस्टॉल

INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/Debug 
    DESTINATION bin 
    FILES_MATCHING 
    PATTERN *.pdb 
) 

इसके अलावा, मैं एक ही स्तर पर एक 'src' फ़ोल्डर में है कि डेवलपर वितरण का निर्माण करने के लिए इस्तेमाल प्रासंगिक स्रोत, स्थापित करने के लिए, प्रबंधित किया है ताकि अपने शीर्ष स्तर वितरण फ़ोल्डर दिखता है के रूप में:

include\ 
src\ 
lib\ 
bin\ 
share\ 
doc\ 
3rdparty\ 
etc\ 

मेरा प्रश्न कैसे मैं PDB फ़ाइलें 'पता' जहां स्रोत है (मैं यह सोचते हैं रहा हूँ इस के लिए आवश्यक है) दे सकते है? क्या कोई सीएमकेईई कमांड है जो इसे प्राप्त कर सकता है? यदि आपके पास है तो एक छोटा सा उदाहरण की सराहना करें। आपके समय और रुचि के लिए धन्यवाद।

+1

आप [इस सवाल] पर एक नज़र लेने के लिए चाहते हो सकता है (http://stackoverflow.com/questions/27952/how-do-i-change-the-locations-of-source-files-in -एक-प्रतीकों-फ़ाइल-pdb)। – Angew

+0

धन्यवाद @ एंग्यू - मैंने पोस्ट और पोस्ट में लिंक से पोस्ट पढ़ा। क्या मुझे वास्तव में उस प्रतीक सर्वर व्यवसाय से गुजरना है? मुझे लगता है कि मैं जो पूछ रहा हूं वह है: क्या पीडीबी और मिलान करने वाले स्रोत को पैकेज करने का एक शानदार तरीका है ताकि मुझे कुछ और करने की आवश्यकता न हो (पहले उत्तर की पंक्तियों के साथ)। –

+1

मेरे पास ऑफ-साइट डिबगिंग के साथ व्यक्तिगत अनुभव नहीं है, लेकिन पीडीबी को स्थानांतरित करने के बारे में मैंने जो कुछ भी पढ़ा है, उससे मुझे लगता है कि आपको 'subst' का उपयोग करना होगा या मूल स्रोत पेड़ को बिल्कुल दर्पण करना होगा।मैं कुछ दिनों की जिज्ञासा से इस मुद्दे की जांच करने की योजना बना रहा हूं; दुर्भाग्यवश, * कुछ दिन के अस्पष्ट मूल्यों के लिए। * – Angew

उत्तर

4

मेरी टिप्पणियों को एक उत्तर में बदलना; इस question और वहां के लिंक से जानकारी पर आधारित है।

पीडीबी फाइलें स्रोत फ़ाइलों को पूर्ण पथ नाम स्टोर करती हैं। प्रतीक सर्वर का उपयोग नहीं करते समय, स्रोत कोड स्थानान्तरण की कुछ डिग्री सुनिश्चित करने का एकमात्र तरीका subst कमांड का उपयोग करना है।

विचार स्रोत पेड़ की जड़ के लिए ड्राइव-अक्षर नाम (उदा। N:\) बनाने के लिए subst का उपयोग करना है। फिर अपने ड्राइव को इस ड्राइव से बनाएं, ताकि N:\ से शुरू होने वाले पूर्ण पथ पीडीबी में एम्बेड हो जाएं। जब आपको बाद में किसी अन्य मशीन पर निष्पादन योग्य डीबग करने की आवश्यकता होती है, तो उस मशीन पर subst का उपयोग करें ताकि स्रोतों के समान पथ प्राप्त हो सकें। यह पीडीबी को स्रोत फ़ाइलों को खोजने में सक्षम करेगा। ,

subst N: C:\MySources 
N: 
run your build 

बाद में मान लीजिए कि आप एक मशीन जहां एक ही फाइल D:\Devel\Other\main.cpp में संग्रहित है पर डिबग करने के लिए की जरूरत है:

उदाहरण के लिए, यदि आप किसी फ़ाइल C:\MySources\main.cpp है, निम्न कार्य करें। बस subst N: D:\Devel\Other करें और फिर N: ड्राइव से भी काम करें।

0

पीडीबी फ़ाइल फाइलों के पथ को संग्रहीत करती है जैसे प्रोग्राम संकलित किया गया था। आपको यह जानने के लिए कुछ भी नहीं करना चाहिए कि स्रोत था।

+0

क्या आप इस बारे में निश्चित हैं? मेरा मतलब है, अगर यह एक पूर्ण पथ है कि पीडीबी फ़ाइल स्टोर (स्रोत के लिए पूर्ण पथ), तो यह कैसे निर्धारित कर सकता है कि जब मैं किसी अन्य डेवलपर के वर्कस्टेशन पर उपयोग करते समय पैकेज और शिप करता हूं? यदि यह सापेक्ष है, तो क्या मुझे यह सुनिश्चित करना चाहिए कि मैं उस स्थान पर स्रोत स्थापित करता हूं जो पीडीबी के समान 'अपेक्षाकृत' है जैसा कि बनाया गया था? मुझे उम्मीद है कि मैं समझ में आता हूं .. –

+0

आप हमेशा इसका परीक्षण कर सकते हैं ... विजुअल स्टूडियो (और WinDBG) दोनों पीडीबी और स्रोत कोड दोनों के मानचित्र को मैप करने के लिए पर्याप्त स्मार्ट हैं। वीएस लोड मॉड्यूल के रूप में एक ही निर्देशिका में पीडीबी की तलाश करेगा (डीबगर में मॉड्यूल टैब पर भी एक नज़र डालें)। आप वीएसएस को भी बता सकते हैं कि डीबग विकल्प के माध्यम से क्या देखना है। जब आप एक स्टैक कॉल पर क्लिक करते हैं, और यदि स्रोत किसी दूसरे स्थान पर है, तो VS आपको स्थान के लिए संकेत देगा। यह भी क्रैश डंप के लिए काम करता है। उस पैमाने पर कितना खराब होगा अगर हम सभी को एक ही स्रोत पेड़ लेआउट होना चाहिए? –

1

आपको केवल दृश्य स्टूडियो को सूचित करने की आवश्यकता है जहां स्रोत है .. यह एक फ़ाइल ब्राउज़र संवाद पॉप अप करेगा, अगर आपके निर्माण के समय से अलग होते हैं तो बस अपनी स्थानीय मशीन पर स्रोत को इंगित करें।

4

मैं सिर्फ answered मेरा अपना ही प्रश्न How to get cmake to install pdb files for targets। लक्ष्य की स्थापित स्थान बिन निर्देशिका में, यदि यह मौजूद है, तो लक्ष्य की पीडीबी फ़ाइल की प्रतिलिपि बनाने के लिए इस इंस्टॉल नियम का उपयोग करें।

install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> DESTINATION bin OPTIONAL) 
संबंधित मुद्दे