सभी वैश्विक चर / स्थानीय चर मुद्रित करना?


337

मैं सभी वैश्विक चर / स्थानीय चर कैसे प्रिंट कर सकता हूं? क्या यह gdb में संभव है?

जवाबों:


489

info variables"सभी वैश्विक और स्थिर चर नामों" को सूचीबद्ध करने के लिए टाइप करें।

info localsउस फ़ंक्शन में स्थिर चर सहित "वर्तमान स्टैक फ्रेम के स्थानीय चर" (नाम और मूल्य) को सूचीबद्ध करने के लिए टाइप करें।

info args"वर्तमान स्टैक फ्रेम के तर्क" (नाम और मूल्य) को सूचीबद्ध करने के लिए टाइप करें।


2
@ केनीटीएम, आउटपुट में स्थिर चर नाम info variablesउस संकलन इकाई के भीतर स्थिर चर होना चाहिए, है ना?
cpuer

3
@cpuer: जरूरी नहीं। यह केवल प्रतीक तालिका में नाम प्रदर्शित करता है। उदाहरण के लिए, मैक पर gcc के साथ एक स्थिर चर yका y.1913संकलन पर नाम बदल दिया जाता है।
kennytm

1
@ केनीटीएम, फंक्शन के अंदर स्टैटिक वेरिएबल्स को स्टैबल वेरिएबल्स फंक्शन (सिंबल टेबल में) के समान स्टोर नहीं किया जाता है?
cpuer

2
@cpuer: वे वैसे ही संग्रहीत हैं लेकिन प्रतीक नामों में अंतर होगा। विचार करें कि आपके पास yफ़ंक्शन में एक स्थिर चर है fooऔर दूसरे yमें है bar। उन्हें अलग करने के लिए, एक अलग नाम दो को सौंपा जाना चाहिए y
kennytm

1
@ केनीटीएम, और अधिक, क्या यह संभव है कि क्रमशः एक चर घोषित किया जाए और परिभाषित किया जाए?
cpuer

110

यदि आप select-frameपहले किसी कॉलिंग फंक्शन के स्थानीय वेरिएबल्स का उपयोग करना चाहते हैंinfo locals

उदाहरण के लिए:

(gdb) bt
#0  0xfec3c0b5 in _lwp_kill () from /lib/libc.so.1
#1  0xfec36f39 in thr_kill () from /lib/libc.so.1
#2  0xfebe3603 in raise () from /lib/libc.so.1
#3  0xfebc2961 in abort () from /lib/libc.so.1
#4  0xfebc2bef in _assert_c99 () from /lib/libc.so.1
#5  0x08053260 in main (argc=1, argv=0x8047958) at ber.c:480
(gdb) info locals
No symbol table info available.
(gdb) select-frame 5
(gdb) info locals
i = 28
(gdb) 

4
( select-frameसंक्षिप्त रूप में selउपयोग किया जा सकता है frame/ वैकल्पिक रूप से / f, जो फ्रेम को प्रिंट भी करता है)
user202729

27

इसके अलावा, चूंकि info localsआप जिस फ़ंक्शन में हैं, उसके लिए तर्कों का उपयोग नहीं करते हैं

(gdb) info args

उदाहरण के लिए:

int main(int argc, char *argv[]) {
    argc = 6*7;    //Break here.
    return 0;
}

argcऔर argvद्वारा नहीं दिखाया जाएगा info locals। संदेश "स्थानीय नहीं होगा।"

संदर्भ: जानकारी स्थानीय कमांड


एक सही संदर्भ यहाँ है: sourceware.org/gdb/current/onbuildocs/gdb/Frame-Info.html
जोहान बोले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.