मैं जीडीबी की खोज कर रहा हूं और मैं जानना चाहता हूं कि किसी फ़ंक्शन की घोषणा का स्मृति पता प्राप्त करना संभव है, उदाहरण के लिए:

int func()
{
    return 1;
}

int main()
{
    func();
    return 0;
}

मुझे कैसे पता चलेगा कि किस पते पर func() फ़ंक्शन घोषित किया गया है?

c gdb
0
aurelien75000 5 मई 2016, 11:18

2 जवाब

सबसे बढ़िया उत्तर

आप नीचे दिए गए लाइन नंबर पर पता प्राप्त करने के लिए info line <line number> का भी उपयोग कर सकते हैं:

(gdb) list
1   #include <stdio.h>
2   
3   int func()
4   {
5       return 1;
6   }
7   
8   int main()
9   {
10      func();
(gdb) info line 3
Line 3 of "test.c" is at address 0x4004ed <func> but contains no code.
(gdb) p &func
$1 = (int (*)()) 0x4004ed <func>
(gdb) 
0
Sunil Bojanapally 5 मई 2016, 12:19

घोषणाएं (और प्रकार प्रणाली) केवल संकलक के लिए मायने रखती हैं, उनका निष्पादन योग्य में कोई प्रतिनिधित्व नहीं है और इस प्रकार कोई स्मृति पता नहीं है (डिबगिंग प्रतीकों के अलावा)।

दूसरी ओर, static-लिंकेज परिभाषाएं, लिंकर द्वारा स्मृति में रखी जाती हैं और उनके पास पते होते हैं। यदि आप किसी प्रतीक का स्मृति पता प्राप्त करना चाहते हैं, तो आपको बस उस पर & ऑपरेटर¹ का उपयोग करना होगा:

(gdb) print &func

मुझे यकीन नहीं है, हालांकि आपको इसकी आवश्यकता क्यों है। यदि आपका मतलब func के स्टैक फ्रेम से है, तो आप फ्रेम को चुनने या आगे बढ़ने के बाद info frame का उपयोग कर सकते हैं।


[1]: आप कार्यों के लिए & को छोड़ सकते हैं।

0
Community 20 जून 2020, 12:12