[C++] मैं जीडीबी में सी ++ वेक्टर के तत्वों को कैसे मुद्रित करूं?



Answers

जीसीसी 4.1.2 के साथ, पूरे std :: vector <int> को myVector कहा जाता है, प्रिंट करने के लिए निम्न कार्य करें:

print *(myVector._M_impl._M_start)@myVector.size()

केवल पहले एन तत्वों को मुद्रित करने के लिए, करें:

print *(myVector._M_impl._M_start)@N

व्याख्या

यह शायद आपके कंपाइलर संस्करण पर काफी निर्भर है, लेकिन जीसीसी 4.1.2 के लिए, आंतरिक सरणी के लिए सूचक है:

myVector._M_impl._M_start 

और पॉइंटर पी से शुरू होने वाले सरणी के एन तत्वों को मुद्रित करने के लिए जीडीबी कमांड है:

print P@N

या, एक संक्षिप्त रूप में (मानक .gdbinit के लिए):

p P@N
Question

मैं जीडीबी में एक std::vector की सामग्री की जांच करना चाहता हूं, मैं इसे कैसे कर सकता हूं? आइए मान लें कि यह सादगी के लिए एक std::vector<int>




~ / .gdbinit में निम्नलिखित डालें

define print_vector
    if $argc == 2
        set $elem = $arg0.size()
        if $arg1 >= $arg0.size()
            printf "Error, %s.size() = %d, printing last element:\n", "$arg0", $arg0.size()
            set $elem = $arg1 -1
        end
        print *($arg0._M_impl._M_start + $elem)@1
    else
        print *($arg0._M_impl._M_start)@$arg0.size()
    end
end

document print_vector
Display vector contents
Usage: print_vector VECTOR_NAME INDEX
VECTOR_NAME is the name of the vector
INDEX is an optional argument specifying the element to display
end

जीडीबी (या सोर्सिंग ~ / .gdbinit) को पुनरारंभ करने के बाद, इस तरह की संबंधित सहायता दिखाएं

gdb) help print_vector
Display vector contents
Usage: print_vector VECTOR_NAME INDEX
VECTOR_NAME is the name of the vector
INDEX is an optional argument specifying the element to display

उदाहरण का उपयोग:

(gdb) print_vector videoconfig_.entries 0
$32 = {{subChannelId = 177 '\261', sourceId = 0 '\000', hasH264PayloadInfo = false, bitrate = 0,     payloadType = 68 'D', maxFs = 0, maxMbps = 0, maxFps = 134, encoder = 0 '\000', temporalLayers = 0 '\000'}}





Links