জিডিবিতে, আমি কীভাবে সরাসরি শীর্ষস্থানীয় কল স্ট্যাক ফ্রেমে উঠে যেতে পারি?


9

আমার কাছে একটি সি প্রোগ্রাম রয়েছে যা অসীম পুনরাবৃত্তির জগতে গভীর নেমে যাওয়ার পরে ত্রুটিগুলি seg করে। জিডিবিতে প্রক্রিয়াটি ব্যাকট্র্যাকিং অকেজো কারণ কল স্ট্যাক ফ্রেমটি কমপক্ষে 1000 ফ্রেম গভীর এবং বারবার ফাংশন কলগুলি চারটি সাধারণ পুনরাবৃত্ত ফাংশন কলগুলির সিরিজ (যাতে ব্রেকপয়েন্টগুলি অকেজো বলে মনে হয়)। ব্যাকট্র্যাসে বারবার কলগুলি কেবলমাত্র বার বার চারটি ফাংশনের নামগুলি পড়ে। এটি আমার কাছে ঘটেছিল যে 'আপ' 'আপ' 'আপ' করা আমাকে আরও উঁচু করে তুলবে, তাই আমি দেখতে পেলাম এই প্যাটার্নটি প্রথম কোথায় শুরু হয়েছিল, তবে মনে হয় এটি শীর্ষতম কল থেকে শুরু করা আরও দক্ষ হবে seems স্ট্যাক ফ্রেম এবং পরিবর্তে পদক্ষেপ, কারণ আমার কুণ্ডলী প্রক্রিয়াটি প্রথম দিকে অসীম পুনরাবৃত্তি শুরু হয়। যদি কল স্ট্যাকের মোট এন ফ্রেম থাকে তবে আমি জানি আমি কেবল এটি করতে পারি

gdb>> up N

স্ট্যাকের শীর্ষে পৌঁছানোর জন্য (এনটি ফ্রেম), তবে সমস্যাটি হ'ল আমি এনকে চিনি না the কল স্ট্যাকের মোট ফ্রেমগুলির সন্ধানের জন্য কি কোনও আদেশ আছে? অথবা, শীর্ষস্থানীয় ফ্রেমে জাম্প দেওয়ার জন্য কি কোনও চতুর অন্তর্নির্মিত জিডিবি কমান্ড রয়েছে? আমার কাছে এটি ঘটেছিল যে শীর্ষস্থানীয় ফ্রেমটি মূল () ফাংশন হওয়া উচিত - আমি কি সেই জ্ঞানটি শীর্ষতম ফ্রেমে পৌঁছতে পারি?

উত্তর:


9

আমার পরীক্ষায় খুব বেশি সংখ্যক 'আপ' ব্যবহার করার ফলে শীর্ষস্থানীয় ফ্রেম প্রদর্শিত হয়, যেমন

(gdb) up 99999
#58 0x0000000000442fb4 in main ()

1
স্ট্যাকের আকার 99999 এর চেয়ে বেশি হলে কাজ করে না
ভিভানডিয়ের

এই উত্তরটি আমার পক্ষে কাজ করেছে, কেবলমাত্র একটি বড় সংখ্যা ব্যবহার করা দরকার।
tesch1

23

শীর্ষস্থানীয় ফ্রেম থেকে শুরু করতে আপনি একটি নেতিবাচক সংখ্যা দিয়ে 'বিটি' নির্দিষ্ট করতে পারেন:

বিটি -20

তারপরে আপনি নিজের ফ্রেমে সরাসরি যেতে ফ্রেম (বা 'চ') ব্যবহার করতে পারেন।


1

fr 0আপনাকে সর্বাধিক সর্বাধিক স্ট্যাক ফ্রেমে নিয়ে যাবে। frফ্রেম জন্য দাঁড়িয়েছে।


2
এটিই ভুল দিক
টেস্ট 1

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