लिनक्स पर इन दोनों आदेशों हैं:objcopy और dsymutil के बीच क्या अंतर है?
objcopy --only-keep-debug foo foo.dbg
objcopy --add-gnu-debuglink=foo.dbg foo
इस अर्थ में कि,
- यह एक स्टैंडअलोन डिबग जानकारी फ़ाइल बनाता में मैक
dsymutil <binary> -o <binary>.dSYM
समतुल्य पर नीचे के बराबर है।
- यह निष्पादन योग्य और डीबग जानकारी फ़ाइल के बीच एक लिंक बनाते हैं। मैक पर
नीचे करने के लिएstrip -S <binary>
objcopy --strip-debug foo
या
strip -g <binary>
बराबर:
अलग करना के लिए
लिनक्स पर आदेशों है
1. मैक ओएसएक्स पर डीएसवाईएम और बाइनरी के बीच लिंकिंग कैसे होती है? 2. क्या इसका मतलब है .o फ़ाइलों को भी dsymutil पास करने की जरूरत है? –
नहीं, dsymutil निष्पादन योग्य से "डीबग मानचित्र" पढ़ता है, जो सभी .o फ़ाइलों के स्थान की सूची देता है। इसका मतलब यह है कि आपके पास .o फाइलें उनके मूल स्थान पर हैं और बाइनरी को नहीं हटाया है जिसे आप dsymutil चालू करना चाहते हैं। ऐसा लगता है कि .o फ़ाइलों को dsymutil चलाने के लिए क्या नहीं पता लगाने की सुविधा के लिए एक स्वीकार्य व्यापार-बंद लगता है ... –
मुझे लगता है कि मैंने अभी जवाब दिया # 2। # 1 के लिए के रूप में। संक्षेप में "बाइनरी पर dsymutil चलकर"। चूंकि बाइनरी जानता है कि .o फाइलें कहां हैं (डीबग मैप से) आपको केवल बाइनरी के पथ को डिस्मुटिल प्रदान करने की आवश्यकता है, यह सबकुछ करेगा। यदि आप डिस्मुटिल कैसे काम करते हैं, इस बारे में विवरण चाहते हैं, तो ध्यान दें कि एक्सकोड 7.0 में हमने dsymutil के एक आंतरिक संस्करण से स्विच किया है जो एक एलएलवीएम स्रोत बेस में लागू किया गया है। तो आप पूरी कहानी प्राप्त करने के लिए llvm/tools/dsymutil में स्रोतों को पढ़ सकते हैं। –