आप इसे gdb
के साथ कर सकते हैं। gdb
में
struct A {
int a;
char b;
short c;
};
int main() {
struct A a;
}
द्विआधारी अप लोड हो रहा है: उदाहरण के लिए, मैं इस स्रोत का उपयोग करेंगे
(gdb) print (int)&((struct A*)0)->a
$1 = 0
(gdb) print (int)&((struct A*)0)->b
$2 = 4
(gdb) print (int)&((struct A*)0)->c
$3 = 6
अद्यतन:
आप एक बड़ी संख्या के लिए यह करने के लिए की जरूरत है फ़ील्ड के बाद, आपको GDB के नए पायथन इंटरफ़ेस का उपयोग करने में आसान लगेगा (आपको इसका उपयोग करने के लिए जीडीबी के हाल के संस्करण की आवश्यकता होगी, मैं 7.4 का उपयोग कर रहा हूं)। मैं offsets.py बना लिया है:
python
sys.path.insert(0, '/path/to/script/dir')
import offsets
end
फिर इसे का उपयोग GDB में की तरह,:
(gdb) offsets-of "struct A"
struct A {
a => 0
b => 4
c => 6
}
यह स्क्रिप्ट एक बनाता है
import gdb
class Offsets(gdb.Command):
def __init__(self):
super (Offsets, self).__init__ ('offsets-of', gdb.COMMAND_DATA)
def invoke(self, arg, from_tty):
argv = gdb.string_to_argv(arg)
if len(argv) != 1:
raise gdb.GdbError('offsets-of takes exactly 1 argument.')
stype = gdb.lookup_type(argv[0])
print argv[0], '{'
for field in stype.fields():
print ' %s => %d' % (field.name, field.bitpos//8)
print '}'
Offsets()
तो फिर आप अपने .gdbinit को जोड़ सकते हैं कुछ सरल धारणाएं, जैसे कि आप बिटफील्ड का उपयोग नहीं करते हैं, और यह नेस्टेड structs में खोद नहीं है, लेकिन यदि आप की जरूरत है तो वे परिवर्तन 3 काफी सरल हैं।
मुझे शायद यहां कुछ स्पष्ट याद आ रहा है, लेकिन यदि आपके पास एक चर है (चलो कहें 'x') जिसे संरचना उदाहरण (या संरचना के लिए सूचक) के रूप में घोषित किया गया है, तो आपको बस ' सभी सदस्यों को डंप करने के लिए gdb में x x (या 'print * x' अगर कोई सूचक) मुद्रित करें। –
मैं उस डंप को पाने की कोशिश नहीं कर रहा हूं जिसे मैं डंप करना चाहता हूं। मेरे पास पहले से ही डंप है और सभी सदस्यों के सापेक्ष पते की आवश्यकता है। – Akhneyzar