2011-07-06 14 views
19

मैं वर्तमान में बड़ी सी ++ क्यूटी आधारित परियोजना पर काम कर रहा हूं जो कि अपने सार्वजनिक एपीआई के एक बड़े पुन: कारक के तहत जाने वाला है और यह एक अच्छा उपकरण होगा जो एक रिपोर्ट उत्पन्न कर सकता है निर्माण के निर्माण से किन तरीकों को जोड़ा या हटा दिया गया है।ट्रैकिंग सी ++ lib सार्वजनिक एपीआई

मुझे पता है कि जावा के लिए ऐसा करने के लिए एक उपकरण है और मुझे लगता है कि .NET के लिए एक हो सकता है लेकिन मैं कुछ खोज के बाद, सी ++ के लिए कुछ भी नहीं ढूंढ सका।

क्या कोई अस्तित्व में है। क्रॉस प्लेटफार्म अच्छा होगा, या अगर केवल लिनक्स में भी ठीक होगा।

+1

क्या आप किसी भी संस्करण नियंत्रण उपकरण का उपयोग कर रहे हैं? यह एक diff उपकरण प्रदान कर सकता है जो xml रिपोर्ट उत्पन्न करता है ... – vrince

+0

संस्करण नियंत्रण के लिए गिट का उपयोग –

+1

मैं गिट के साथ काम नहीं करता लेकिन यदि आप [इस पोस्ट] में दिखाए गए उपयोग का उपयोग करते हैं (http://stackoverflow.com/questions/ 822811/मतभेद-इन-गिट-शाखाएं) आपके * एपीआई * के एक्सपोज़ड * भाग पर मुझे लगता है कि आपके एपीआई के दो संस्करणों के बीच क्या बदल गया है इसकी एक सभ्य रिपोर्ट हो सकती है ... – vrince

उत्तर

12

यदि आप अपने एपीआई को दस्तावेज़ करने के लिए डॉक्सीजन या कुछ समान टूल का उपयोग करते हैं तो आप टेबल-ऑफ-सामग्री diff कर सकते हैं।

  • ऐसा कुछ है जो आपको वैसे भी करना चाहिए।
    • (तुम भी गैर-दस्तावेजी कार्यों को खोजने के लिए Doxygen बता सकते हैं।)
  • तुम कुछ भी बदले बिना प्राचीन चेकइन करने के लिए आसानी से इसे लागू कर सकते हैं।
  • डॉक्सिजन और इसके बारे में भाषा को private और public पर संवेदनशील होने के बारे में पर्याप्त जानकारी है।
  • यह समाधान कई भाषाओं पर लागू किया जा सकता है और यह किसी विशेष आईडीई पर निर्भर नहीं है।
  • कोई तृतीय-पक्ष सॉफ़्टवेयर आवश्यक नहीं है (बशर्ते कि आपके पास पहले से ही एक दस्तावेज़ जनरेटर है)।
1

निर्यात कार्यों की एक सूची डंप करने के लिए एक स्वचालित निर्माण कदम यूनिक्स पसंद और जो भी विंडोज उपकरण पर nm का उपयोग करता है जोड़ें (dumpbin?)। बिल्डिंग जैसे निर्माण से बदलते महत्वहीन बिट्स को बंद करने के लिए कुछ स्क्रिप्टिंग भाषा का उपयोग करें।

प्रत्येक बिल्ड के बाद यह फ़ाइल संस्करण नियंत्रण में प्रतिबद्ध करती है। फिर आप प्रत्येक निर्माण से मतभेद देख सकते हैं।

क्योंकि यह एक सी ++ एप्लिकेशन है, नाम पैरामीटर प्रकार के परिवर्तन भी प्राप्त करेंगे।

2

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

In Windows you use a .DEF file to export symbols from a DLL.

In Unix-likes you use a linker script to do it.

+0

निर्यात किए गए प्रतीकों का विज्ञापन नहीं है कि वे निजी हैं या सार्वजनिक हैं। – spraff

+0

@spraff: हाँ लेकिन यह कैसे प्रासंगिक है? क्योंकि निजी प्रतीक सार्वजनिक एपीआई का हिस्सा नहीं हैं? –

+0

यही आवश्यकता है, हां। – spraff

0

आप Git का उपयोग करते हैं तो आप एक नई शाखा बना सकते हैं और सभी हेडर फाइल है कि शाखाओं bwetween एपीआई परिभाषित तुलना करने के लिए एक खोल स्क्रिप्ट का उपयोग करना चाहिए। यदि आपने अभी तक ऐसा नहीं किया है, तो आपको भविष्य में संस्करणों के लिए लाइब्रेरी बाइनरी संगत/अधिक स्थिर बनाने के लिए अपनी एपीआई हेडर फ़ाइलों के लिए इंप पैटर्न को उपयोग करना चाहिए। केटीई डेवलपर विकी में d_pointer या केडीई टेकबेज में D-Pointers के भाग के लिए प्रविष्टि देखें।

6

एपिडिफ़ के लिए वाणिज्यिक सूची के नीचे की जांच करें, मुझे लगता है कि यह निकटतम मैच होगा।

'एनएम' का उपयोग करने का सुझाव आप

nm <binary_or_lib> | c++filt 

चला सकते हैं और यह एक सभ्य स्नैपशॉट, कि पोस्ट-प्रोसेसिंग भी पर्याप्त मात्रा में की आवश्यकता होगी उत्पन्न करेंगे, एक बुरा एक नहीं है।

तरीके इस पर अपनी खुद की रोल करने के बहुत सारे है:

  1. Doxygen सभी वर्ग/सदस्य/विधि की जानकारी है कि एक XML फ़ाइल उत्पन्न कर सकते हैं कि आप कर सकते थे तो इमारत वर्ग पेड़ों के लिए मेरा। यह तब पेड़ की तुलना करने का मामला होगा। कुछ उपयोगी @http://www.stack.nl/~dimitri/doxygen/helpers.html

  2. आप जीसीसी के साथ संकलन कर रहे हैं के बाद प्रसंस्करण लिपियों/उपयोगिताओं पाया जा सकता है, egypt एक उपन्यास दृष्टिकोण मध्यवर्ती RTL का उपयोग करता है फोन-निर्भरता रेखांकन का उत्पादन होता है - ऐसा लगता है जैसे कि यह नहीं होगा बुनियादी एपीआई जानकारी उत्पन्न करने के लिए एक समान विधि का उपयोग करना मुश्किल हो सकता है।

  3. GCC-XML संकलित कोड का एक्सएमएल प्रस्तुतियां उत्पन्न करेगा, जो डॉक्सिजन की तुलना में थोड़ा अधिक निम्न स्तर है क्योंकि यह रैपर कोड लिखने के लिए एक तंत्र प्रदान करता है।

  4. cppHeaderParser, एक पायथन मॉड्यूल एपीआई मानचित्र उत्पन्न करने का एक आसान तरीका प्रदान करने वाले हेडर के अच्छे पायथन ऑब्जेक्ट प्रस्तुतियों को उत्पन्न करेगा।

  5. ctags एक टैग डेटाबेस उत्पन्न करता है जिसे शायद संसाधित किया जा सकता है। हालांकि इसमें सी ++ नेमस्पेस के साथ समस्याएं हैं।

कुछ वाणिज्यिक समाधान

  1. scitool के Understand मानचित्रण सॉफ्टवेयर बाहर का एक बड़ा काम करता है और अपने डेटाबेस क्वेरी करने के लिए एक पर्ल एपीआई है।

  2. MagicDraw यूएमएल के आसपास केंद्रित भारी वजन वाला उपकरण है, लेकिन यह मौजूदा सी ++ कोड-बेस को रिवर्स-इंजीनियर कर सकता है और मेटा-सूचना उत्पन्न कर सकता है।

  3. apidiff एक बहुत सस्ती उपकरण और दिए गए मापदंड (पार मंच, C++) होने की संभावना निकटतम मुकाबला नहीं है हो रहा है।

+0

+1 apidiff उल्लेख – celavek

-1

अपने स्वयं के विश्लेषण उपकरण मैं भी BSC Toolkit का उपयोग कर में देख सुझाव है कि रोल करने Doxygen उपयोग करने का विकल्प के अलावा। यह आपको एमएस कंपाइलर्स द्वारा उत्पन्न कोड/क्लास ब्राउज़र जानकारी तक पहुंचने की अनुमति देता है और मुफ्त में उपलब्ध है। टूलकिट सभी परिभाषाओं, उपयोग संदर्भों, स्रोत और रेखा संख्याओं, पैरामीटर, एक्सेस संशोधक इत्यादि के लिए प्रोग्रामेटिक पहुंच प्रदान करता है। नाम उनके गले वाले रूप में प्रदान किए जाते हैं और यदि आवश्यक हो तो उन्हें मानव पठनीय प्रारूप में अनुवाद के लिए सुविधाएं शामिल की जाती हैं।

IXConnection (struct_name) 
IXConnection::STATE (enum_name) 
IXConnection::setState(enum STATE) (mem_func public) 
IXConnection::setAccount(struct IXAccount *) (mem_func public) 
IXConnection::setDisplayName(class String *) (mem_func public) 
IXConnection::setProtocolData(void *) (mem_func public) 
IXConnection::getState(enum STATE *) (mem_func public) 
IXConnection::getAccount(struct IXAccount * *) (mem_func public) 
IXConnection::getProtocol(struct IXProtocol * *) (mem_func public) 
IXConnection::getPassword(class String * *) (mem_func public) 
IXConnection::getDisplayName(class String * *) (mem_func public) 
IXConnection::getProtocolData(void * *) (mem_func public) 
IXConnection::setProgress(class String *,int,int) (mem_func public) 
IXConnection::notice(class String *) (mem_func public) 
IXConnection::error(enum REASON,class String *) (mem_func public) 
1

abi-compliance-checker का प्रयास करें:

यहाँ मैं पर काम कर रहा हूँ एक परियोजना से कुछ बहुत ही बुनियादी उत्पादन होता है। यह टूल आपके एपीआई में जोड़े गए/हटाए गए प्रतीकों, पैरामीटर/डेटा प्रकारों में परिवर्तन और बाइनरी संगतता बिंदु दृश्य से अन्य परिवर्तन दिखाता है। यह क्रॉस-प्लेटफार्म है।सबसे अच्छा प्रदर्शन लिनक्स पर है, लेकिन यह विंडोज और मैक पर भी चलाने में सक्षम है।

उपयोग:

abi-compliance-checker -lib NAME -old OLD.abidump -new NEW.abidump 

* .abidump फ़ाइलों ABI हैं abi-dumper उपकरण द्वारा उत्पन्न उदासीनता।

क्यूटी लाइब्रेरी के लिए यह compatibility table इस उपकरण का उपयोग बनाई गई है:

enter image description here

नीचे टिप्पणी में किसी भी उपयोग में सवाल पूछने के लिए स्वतंत्र महसूस।

+0

मिठाई के लिए! ये कुछ ऐसी बातें मैं खोज रहा था है। मैं इसे जाने दूंगा। –

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