সমস্ত বৈশ্বিক চলক / স্থানীয় ভেরিয়েবল মুদ্রণ?


337

আমি কীভাবে সমস্ত বিশ্বব্যাপী ভেরিয়েবল / স্থানীয় ভেরিয়েবল মুদ্রণ করতে পারি? জিডিবিতে কি তা সম্ভব?

উত্তর:


488

info variables"সমস্ত গ্লোবাল এবং স্ট্যাটিক ভেরিয়েবল নাম" তালিকা করতে টাইপ করুন ।

info locals"বর্তমান স্ট্যাক ফ্রেমের স্থানীয় ভেরিয়েবল" তালিকা করতে টাইপ করুন (নাম এবং মান), সেই ফাংশনে স্থির ভেরিয়েবলগুলি সহ।

info args"বর্তমান স্ট্যাক ফ্রেমের আর্গুমেন্টগুলি" (নাম এবং মান) তালিকা করতে টাইপ করুন ।


2
@ কেনিটিএম, আউটপুটে স্থির পরিবর্তনশীল নামগুলি info variablesসেই সংকলন ইউনিটের মধ্যে স্থির পরিবর্তনশীল হওয়া উচিত, তাই না?
সিপিউয়ার

3
@ সিপুয়ার: অগত্যা নয়। এটি কেবল চিহ্ন সারণীতে নামটি প্রদর্শন করে। উদাহরণস্বরূপ, ম্যাকে জিসিসি সহ একটি স্থির ভেরিয়েবলের নতুন yনাম y.1913সংকলন করা হয়েছে।
কেনেটিম

1
@ কেন্নিটিএম, ফাংশনের অভ্যন্তরে স্থির পরিবর্তনশীল একই ধরণের স্ট্যাটিক ভেরিয়েবলের বাইরে ফাংশন (প্রতীক টেবিলের) হিসাবে সংরক্ষণ করা হয় না?
সিপিউয়ার

2
@ সিপিউয়ার: সেগুলি একইভাবে সংরক্ষণ করা হয় তবে প্রতীকের নামগুলি পার্থক্য করবে। বিবেচনা করুন আপনার yফাংশনে একটি স্থির পরিবর্তনশীল fooএবং অন্যটিতে yরয়েছে bar। তাদের পার্থক্য করার জন্য, দুজনের আলাদা আলাদা নাম নির্ধারণ করতে হবে y
কেনেটিম

1
@ কেনিটিএম, আরও আরও, যেখানে যথাক্রমে কোনও ভেরিয়েবল ঘোষিত এবং সংজ্ঞায়িত করা সম্ভব হবে?
সিপিউয়ার

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সংক্ষিপ্তসার হিসাবে চিহ্নিত করা যেতে পারে can selবিকল্পভাবে ব্যবহার frame/ / fযা ফ্রেম প্রিন্ট করে)
ব্যবহারকারী 202729

27

এছাড়াও, যেহেতু info localsআপনি যে ফাংশনে রয়েছেন তার জন্য আর্গুমেন্টগুলি প্রদর্শন করে না use

(gdb) info args

উদাহরণ স্বরূপ:

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

argcএবং argvদ্বারা প্রদর্শিত হবে না info locals। বার্তাটি হবে "কোনও স্থানীয় নেই"।

তথ্যসূত্র: তথ্য স্থানীয়দের কমান্ড


প্রকৃত উল্লেখটি এখানে রয়েছে: সোর্সওয়্যার.অর্গ
জোহান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.