list
কমান্ডগুলি লাইনগুলির একটি সেট মুদ্রণ করে, তবে আমার একটি একক লাইন দরকার, যেখানে আমি আছি এবং যেখানে সম্ভবত কোনও ত্রুটি ঘটেছে।
bt
অথবা backtrace
বা where
ফাংশন কলগুলির স্ট্যাক মুদ্রণ করুন, f
বা frame
কার্যকর করতে পরবর্তী লাইন মুদ্রণ করুন।
list
কমান্ডগুলি লাইনগুলির একটি সেট মুদ্রণ করে, তবে আমার একটি একক লাইন দরকার, যেখানে আমি আছি এবং যেখানে সম্ভবত কোনও ত্রুটি ঘটেছে।
bt
অথবা backtrace
বা where
ফাংশন কলগুলির স্ট্যাক মুদ্রণ করুন, f
বা frame
কার্যকর করতে পরবর্তী লাইন মুদ্রণ করুন।
উত্তর:
ডিবাগ করার সময় আমি একই তথ্য পাই। যদিও আমি স্ট্যাকট্রেসটি যাচাই করছি না। আমার মনে হয় আপনি সম্ভবত অপ্টিমাইজেশন পতাকা ব্যবহার করেছেন। এই লিঙ্কটি দেখুন - সম্পর্কিত কিছু।
-g3
যেকোন অপ্টিমাইজেশন পতাকাটি সরানোর সাথে সংকলনের চেষ্টা করুন । তাহলে এটি কাজ করতে পারে। এইচটিএইচ!
-g
ডিবাগ তথ্য ধারণ করার জন্য সংকলিত হয়েছিল , আমি বর্তমানে একটি স্ট্যাক ফ্রেমে রয়েছি, শেয়ার্ড লাইব্রেরির একটি থেকে নেওয়া, যা সম্ভবত লাইন তথ্য ধারণ করার জন্য সংকলিত হয়নি। ধন্যবাদ, কুমার
'ফ্রেম' কমান্ড আপনাকে যা খুঁজছে তা আপনাকে দেবে। (এটি কেবল 'চ' সংক্ষেপে বর্ণিত হতে পারে)। এখানে একটি উদাহরণ:
(gdb) frame
\#0 zmq::xsub_t::xrecv (this=0x617180, msg_=0x7ffff00008e0) at xsub.cpp:139
139 int rc = fq.recv (msg_);
(gdb)
কোনও যুক্তি ছাড়াই, 'ফ্রেম' আপনাকে বলে দেয় আপনি কোথায় আছেন (একটি যুক্তি দিয়ে এটি ফ্রেম পরিবর্তন করে)। ফ্রেম কমান্ডের আরও তথ্য এখানে পাওয়া যাবে ।
কমান্ড যেখানে বা ফ্রেম ব্যবহার করা যেতে পারে। যেখানে কমান্ড ফাংশন নামের সাথে আরও তথ্য দেবে
মনে রাখবেন যে জিডিবি হ'ল একটি শক্তিশালী কমান্ড-নিম্ন স্তরের নির্দেশাবলীর সাবলীল - তাই সমাবেশের ধারণাগুলিতে আবদ্ধ।
আপনি যা খুঁজছেন তাকে ডি নির্দেশিকা পয়েন্টার বলা হয়, যেমন:
নির্দেশ পয়েন্টার রেজিস্টার মেমরি ঠিকানার দিকে নির্দেশ করে যা প্রসেসর পরবর্তী সময়ে কার্যকর করার চেষ্টা করবে। নির্দেশিকা নির্দেশককে 16-বিট মোডে আইপি , 32-বিট মোডে ইপ এবং 64৪ -বিট মোডে রিপ বলা হয়।
আরও বিস্তারিত এখানে
জিডিবি এক্সিকিউশনে উপলব্ধ সমস্ত রেজিস্টারগুলি এর সাথে প্রদর্শিত হতে পারে:
(gdb) info registers
এটির সাহায্যে আপনি জানতে পারবেন আপনার প্রোগ্রামটি কোন মোডে চলছে (এইগুলির মধ্যে কোন রেজিস্ট্রার রয়েছে তা দেখে)
তারপর (এখানে সবচেয়ে সাধারণ রেজিস্টার ব্যবহার চেরা আজকাল প্রতিস্থাপন eip বা খুব কমই IP প্রয়োজনে):
(gdb)info line *$rip
আপনি লাইন নম্বর এবং ফাইল উত্স প্রদর্শন করবে
(gdb) list *$rip
কিছু আগে এবং পরে আপনাকে সেই লাইনটি প্রদর্শন করবে
তবে সম্ভবত
(gdb) frame
অনেক ক্ষেত্রে যথেষ্ট হতে হবে।
ip
এখানে কখনও ব্যবহৃত হয় না। এছাড়াও, পরিবর্তে স্পষ্টভাবে প্রোগ্রাম কাউন্টার নাম বানান, আপনি GDB এর ওরফে জন্য ব্যবহার করতে পারেন: $pc
। সুতরাং x/10i $pc
বর্তমান নির্দেশ পয়েন্টার 10 নির্দেশাবলী অবতরণ স্থাপত্য নির্বিশেষে হবে - এটা মধ্যে i386,, x86_64 কাজ করবে, এআরএম ইত্যাদি ..
উপরের সমস্ত উত্তর সঠিক, আমি যা পছন্দ করি তা হল টুই মোড (সিটিআরএল + এক্সএ বা 'টুই সক্ষম') ব্যবহার করা যা আপনার অবস্থান এবং একটি পৃথক উইন্ডোতে ফাংশন দেখায় যা ব্যবহারকারীদের জন্য খুব সহায়ক। আশা করি এটিও সাহায্য করবে।
backtrace
বাwhere
, এমনকিinfo line
বা কেবল সহজভাবেbt
(ব্যাকট্র্যাসের জন্য)। একটি জিডিবি টিউটোরিয়ালের জন্য dirac.org/linux/gdb