मैं जीडीबी में सी-स्ट्रिंग की पूरी लंबाई प्रिंट करना चाहता हूं। डिफ़ॉल्ट रूप से इसे संक्षिप्त किया जा रहा है, मैं GDB को पूरे स्ट्रिंग को प्रिंट करने के लिए कैसे मजबूर करूं?
मैं जीडीबी में सी-स्ट्रिंग की पूरी लंबाई प्रिंट करना चाहता हूं। डिफ़ॉल्ट रूप से इसे संक्षिप्त किया जा रहा है, मैं GDB को पूरे स्ट्रिंग को प्रिंट करने के लिए कैसे मजबूर करूं?
जवाबों:
set print elements 0
set print elements
number-of-elements
GDB के कितने तत्व प्रिंट होंगे इस पर एक सीमा निर्धारित करें। यदि GDB एक बड़े सरणी को प्रिंट कर रहा है, तो यह set print elements
कमांड द्वारा सेट किए गए तत्वों की संख्या को प्रिंट करने के बाद प्रिंट करना बंद कर देता है । यह सीमा स्ट्रिंग्स के प्रदर्शन पर भी लागू होती है। जब GDB शुरू होता है, इस सीमा को 200 पर सेट है सेटिंग संख्या के- तत्वों शून्य का अर्थ है कि मुद्रण असीमित है ।
जब तक आपका कार्यक्रम एक शांत अवस्था में है, तब तक आप call (void)puts(your_string)
इसे प्रिंटआउट करने के लिए भी कर सकते हैं । समान सिद्धांत डिबगर के लिए उपलब्ध सभी कार्यों पर लागू होता है, वास्तव में।
एक तीसरा विकल्प है: x कमांड, जो आपको वैश्विक सेटिंग बदलने के बजाय विशिष्ट कमांड के लिए एक अलग सीमा निर्धारित करने की अनुमति देता है। एक स्ट्रिंग के पहले 300 अक्षरों को प्रिंट करने के लिए आप इसका उपयोग कर सकते हैं x/300s your_string
। आउटपुट पढ़ने में थोड़ा कठिन हो सकता है। उदाहरण के लिए SQL क्वेरी के मुद्रण के परिणाम:
(gdb) x / 300sb stmt.c_str () 0x9cd948: "SELECT article.r" ... 0x9cd958: "आर्टिकेल से बकाया" ... ..
x
!
printf
आदेश पूरा तार प्रिंट होगा:
(gdb) printf "%s\n", string
set print elements nnn
सीमा का सम्मान करने के लिए लगता है , और जब तक आप ऐसा नहीं करते तब तक पूरी स्ट्रिंग नहीं छपेगी set print elements 0
।
बस इसे पूरा करने के लिए:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
आपको एक लंबाई देनी होगी, लेकिन उस तार का प्रतिनिधित्व बदल सकता है:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
यदि आप उनके मूल्यों से डिबग करना चाहते हैं तो यह उपयोगी हो सकता है
उपयोग करना set elements ...
हमेशा सबसे अच्छा तरीका नहीं है। यह उपयोगी होगा अगर एक अलग थे set string-elements ...
।
इसलिए, मैं अपने .gdbinit में इन कार्यों का उपयोग करता हूं:
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %s\n", strlen($arg0), $arg0
end
चेतावनियां: