नोट: कार्यक्रम उच्च अनुकूलन स्तर के साथ संकलित एस (-ओ 3, -ओ 4) ऑप्टिमाइज्ड चर, इन-लाइन वाले फ़ंक्शंस और अनियंत्रित लूप के लिए कई डिबगिंग प्रतीकों को उत्पन्न नहीं कर सकता है, चाहे किसी भी .ddeug फ़ाइल में एम्बेड किए गए प्रतीकों (-g) या निकाले गए (objcopy) के बावजूद।
वैकल्पिक दृष्टिकोण
ए) कंपाइलर अनुकूलित निष्पादन योग्य (-O3, -O4) के लिए प्रोग्राम में संस्करण (VCS, git, svn) डेटा एम्बेड करें।
बी) निष्पादन योग्य का दूसरा गैर-अनुकूलित संस्करण बनाएं।
पहला विकल्प बाद के दिनांक में पूर्ण डीबगिंग और प्रतीकों के साथ उत्पादन कोड को पुनर्निर्माण करने का माध्यम प्रदान करता है। कोई अनुकूलन के साथ मूल उत्पादन कोड को फिर से बनाने में सक्षम होने के कारण डीबगिंग के लिए जबरदस्त मदद है। (नोट: यह मानता है कि प्रोग्राम के अनुकूलित संस्करण के साथ परीक्षण किया गया था)।
आपकी बिल्ड सिस्टम संकलन दिनांक, प्रतिबद्धता और अन्य वीसीएस विवरणों के साथ लोड की गई .c फ़ाइल बना सकती है।
program: program.o version.o
program.o: program.cpp program.h
build_version.o: build_version.c
build_version.c:
@echo "const char *build1=\"VCS: Commit: $(shell git log -1 --pretty=%H)\";" > "[email protected]"
@echo "const char *build2=\"VCS: Date: $(shell git log -1 --pretty=%cd)\";" >> "[email protected]"
@echo "const char *build3=\"VCS: Author: $(shell git log -1 --pretty="%an %ae")\";" >> "[email protected]"
@echo "const char *build4=\"VCS: Branch: $(shell git symbolic-ref HEAD)\";" >> "[email protected]"
# TODO: Add compiler options and other build details
.TEMPORARY: build_version.c
के बाद कार्यक्रम कमांड का उपयोग करके संकलित किया गया है यदि आप मूल अपने कोड के लिए 'प्रतिबद्ध' पता लगा सकते हैं: strings -a my_program | grep VCS
VCS: PROGRAM_NAME=my_program
VCS: Commit=190aa9cace3b12e2b58b692f068d4f5cf22b0145
VCS: BRANCH=refs/heads/PRJ123_feature_desc
VCS: AUTHOR=Joe Developer [email protected]
VCS: COMMIT_DATE=2013-12-19
सब छोड़ दिया है यहाँ एक '+ Git बनाने' उदाहरण है मूल कोड को चेक-आउट करना, ऑप्टिमाइज़ेशन के बिना फिर से संकलित करना और डीबगिंग शुरू करना है।
स्रोत
2013-12-27 20:25:14
यदि आपको उत्पादन में कोई समस्या है और प्रक्रिया को जीडीबी के साथ संलग्न करने की आवश्यकता है, तो क्या आप डीडीबी प्रतीक फ़ाइल को जीडीबी को प्रदान करने में सक्षम होंगे? और कैसे, अगर ऐसा है? thnx –
@yves Baumes बस अपने उत्पादन बॉक्स में .debug फ़ाइलों के साथ .debug निर्देशिका जोड़ें और जीडीबी उन्हें उठा लेना चाहिए। डीबग सत्र के बाद आप उन्हें फिर से हटा सकते हैं। – lothar
एक उदाहरण के लिए @ लांस रिचर्डसन उत्तर टिप्पणियों का संदर्भ लें। – GuruM