जब जीडीबी के साथ डीबगिंग करते हैं, तो मैं एक सुविधा चर को एक नए निर्मित मूल्य पर सेट करना चाहता हूं।सुंदर प्रिंटर के लिए gdb में कन्स्ट्रक्टर को कॉल करने के लिए कैसे करें
मैं क्यूटी फ्रेमवर्क का उपयोग कर प्रोग्रामिंग कर रहा हूं, इसलिए मैं एक क्यूस्ट्रिंग बनाना चाहता हूं, लेकिन यह सवाल के लिए अप्रासंगिक है, क्योंकि मैं यह जानना चाहता हूं कि किसी भी वर्ग के साथ इसे कैसे किया जाए।
मैं
(gdb) set $str = 'QString::QString("abc")'
No symbol "QString::QString("abc")" in current context.
(gdb) set $str = QString::QString("abc")
Cannot resolve method QString::QString to any overloaded instance
(gdb) set $str = QString("abc")
A syntax error in expression, near `("abc")'.
की कोशिश की तो मैं set overload-resolution off
उपयोग करने की कोशिश है, तो निम्न में जिसके परिणामस्वरूप:
(gdb) set $str = 'QString::QString(const char*)'(malloc(sizeof(QString)), "abc")
(gdb) p $str
$8 = void
ठीक है, कंस्ट्रक्टर्स:
set $str = QString::QString("abc")
non-unique member `QString' requires type instantiation
set $str = 'QString::QString(const char*)'("abc")
Too few arguments in function call.
तो मैं एक इस सूचक की जरूरत है ग्रहण वापसी शून्य, इसका मतलब है कि मुझे कहीं भी malloc के वापसी मूल्य को बचाने के लिए है:
(gdb) set $pointer = malloc(sizeof(QString))
(gdb) p $pointer
$9 = 6304560
(gdb) p/x $pointer
$10 = 0x603330
(gdb) set $str = 'QString::QString(const char*)'($pointer, "abc")
(gdb) p $str
$11 = void
(gdb) p $pointer
$12 = 6304560
(gdb) p *((QString*)$pointer)
$13 = "abc"
ठीक है, अब इस अपेक्षा के अनुरूप है, तथापि मैं एक अजगर सुंदर प्रिंटर के लिए इस कोड को gdb.parse_and_eval में() का उपयोग करना चाहते काम करता है। अब यह कई बार मॉलोक को कॉल करेगा, मेमोरी रिसाव बनायेगा। तो बस मुफ्त() कॉल करें? अब कुछ अप्रत्याशित होता है:
(gdb) call free($pointer)
$14 = 0
(gdb) p *((QString*)$pointer)
$15 = "abc"
सूचक अभी भी मान्य है, जो निश्चित रूप से, बिल्कुल ठीक हो सकता है के बाद से स्मृति पुन: उपयोग नहीं किया गया है। हालांकि मुझे यकीन नहीं है कि यह ठीक है क्योंकि कुछ और मेमोरी ब्लॉक आवंटित करने के बाद जो ठीक उसी QString में फिट होते हैं, पॉइंटर मान को अभी भी मॉलोक द्वारा पुन: उपयोग नहीं किया गया है।
क्या मैं एक बड़ी मेमोरी-रिसाव बना रहा हूं यदि मैं इसे एक सुंदर प्रिंटर में उपयोग करता हूं, जिसे डीबग सत्र के दौरान कई बार बुलाया जा सकता है? वांछित परिणाम बनाने का कोई आसान समाधान है (यानी पायथन एपीआई का उपयोग कर)?
इससे भी असंबंधित, क्यों मुक्त (3) मुझे 0 का रिटर्न वैल्यू दे रहा है जबकि यह वास्तव में शून्य है?