में <अपूर्ण प्रकार> चर मुद्रित करने के लिए कैसे करें कभी-कभी gdb कुछ प्रकार के चर के लिए "अपूर्ण प्रकार" प्रिंट करता है। इसका क्या अर्थ है और हम उस मूल्य को कैसे देख सकते हैं?जीडीबी
जीडीबी
उत्तर
इसका मतलब है कि उस चर के प्रकार को अपूर्ण रूप से निर्दिष्ट किया गया है। उदाहरण के लिए:
struct hatstand;
struct hatstand *foo;
GDB जानता है कि foo
एक hatstand
संरचना करने के लिए एक सूचक है, लेकिन है कि संरचना के सदस्यों परिभाषित नहीं किया गया है। इसलिए, "अपूर्ण प्रकार"।
मूल्य मुद्रित करने के लिए, आप इसे एक संगत प्रकार में डाल सकते हैं।
उदाहरण के लिए, यदि आप जानते हैं कि foo
वास्तव में एक lampshade
संरचना करने के लिए एक सूचक है:
print (struct lampshade *)foo
या, आप एक सामान्य सूचक के रूप में इसे प्रिंट, या यह इलाज हो सकता है जैसे कि यह एक पूर्णांक थे:
print (void *)foo
print (int)foo
भी देखें GDB पुस्तिका से इन पृष्ठों:
मैं क्या पाया है कि यदि आप एक समारोह अधूरा struct प्रकार gdb का उपयोग करता है एकत्रित न struct सदस्यों के पता चलता है 'और बाद में उन्हें प्रदर्शित कर सकते हैं।
struct my_string {
char * _string,
int _size
} ;
कुछ कार्यों बना सकते हैं और सूचक के माध्यम से प्राप्त करने के लिए स्ट्रिंग:
int main(int argc, char *argv[]) {
my_string *str = create_string("Hello World!") ;
printf("String value: %s\n", get_string(str)) ;
...
}
:
my_string * create_string(const char *) {...}
const char * get_string(my_string *){...}
और एक परीक्षण है कि एक स्ट्रिंग बनाता है उदाहरण के लिए, आप एक तार struct है कहना इसे जीडीबी में चलाएं और 'प्रिंट * स्ट्र' करने का प्रयास करें और आपको 'अधूरा प्रकार' प्रतिक्रिया मिलेगी। हालांकि, 'get_string को अलग करें' और फिर 'प्रिंट * str' को आज़माएं और यह संरचना और मानों को सही तरीके से प्रदर्शित करेगा। मुझे नहीं पता कि यह क्यों काम करता है, लेकिन यह करता है।
मुझे एक ही समस्या थी। यदि आप स्वयं अपनी पुस्तकालयों से प्रतीक लोड हैं:
set auto-solib-add off
attach thread_id
shared any_lib
shared another_lib
आप पुस्तकालय है, जहां इस वस्तु एक ही कमांड के साथ घोषित किया जाता है, साथ ही से प्रतीकों लोड करने के लिए की जरूरत है।
मुझे त्रुटि का पूरा अर्थ नहीं पता है, लेकिन जैसा कि पीटर नोट करता है, संबंधित विधि के डिस्सेप्लर ऐसा कुछ करता है जो इनमें से कुछ प्रकार की परिभाषाओं को उपलब्ध कराता है।
मेरे उदाहरण:
एक वर्ग के लिए ज में, उस वर्ग एक आंतरिक सहायक वर्ग के एक आगे घोषणा शामिल थे ताकि बाहरी वर्ग इसे करने के लिए एक सूचक हो सकता है। इसी .cpp में पूर्ण आंतरिक सहायक वर्ग परिभाषा थी।
बाहरी वर्ग की एक विधि में तोड़ने पर, जीडीबी ने बाह्य वर्ग के उदाहरण के माध्यम से आंतरिक वर्ग के उदाहरण के लिए सूचक के अपूर्णता के लिए अपूर्ण प्रकार की सूचना दी।
बाहरी वर्ग में विधियों में से एक पर डिस्सेबल कमांड जारी करने से पहले एक ही सूचक का उपयोग करके आंतरिक कक्षा की संरचना को समझने के लिए जीडीबी को अनुमति दी गई थी।
- 1. जीडीबी: जीडीबी
- 2. जीडीबी: जीडीबी
- 3. जीडीबी
- 4. जीडीबी
- 5. जीडीबी
- 6. जीडीबी
- 7. जीडीबी
- 8. जीडीबी
- 9. जीडीबी
- 10. जीडीबी
- 11. जीडीबी
- 12. जीडीबी
- 13. जीडीबी
- 14. जीडीबी
- 15. जीडीबी?
- 16. जीडीबी
- 17. जीडीबी
- 18. जीडीबी
- 19. जीडीबी
- 20. जीडीबी (मिनजीडब्लू)
- 21. डीडीडी (जीडीबी)
- 22. जीडीबी - सी ++
- 23. मैं जीडीबी
- 24. जीडीबी ब्रेकपॉइंट्स
- 25. जीडीबी: कोड 030000000375
- 26. जीडीबी फ्रंटएंड डीडीडी
- 27. प्रिंटिंग स्ट्रिंग जीडीबी
- 28. जीडीबी | वैरिएबल तर्क सूची
- 29. जीडीबी और क्लैंग
- 30. जीडीबी क्यों लटकाएगा?
अच्छा जवाब, हालांकि लिंक 404 हैं। –
फिक्स्ड। याद नहीं कर सकते कि वे पहले से क्या लिंक कर रहे थे, लेकिन इन दो लिंक सहायक होना चाहिए :)। –