স্টাডাউটের পরিবর্তে ফাইলে জিডিবি প্রিন্ট করুন


104

আমি জিডিবি চালাচ্ছি এবং those দুর্ভাগ্যজনক godশ্বর বিষয়গুলির মধ্যে একটি পরীক্ষা করতে চাই। পুরো জিনিসটি দেখতে অনেক পৃষ্ঠাগুলি লাগে (এবং আমার কাছে 24 "মনিটরের পাশাপাশি রয়েছে!) ব্যবহারের সহজলভ্যতার জন্য, আমি জিডিবি চাইব স্ক্রিনের পরিবর্তে কোনও ফাইলটিতে মুদ্রণ করুন যাতে আমি এটি খুলতে পারি vi এবং স্বাচ্ছন্দ্যে ঘোরাফেরা করুন সমস্ত gdb এর বহুমুখিতা সহ, এটি করার একটি উপায় অবশ্যই আছে, তাই না?

উত্তর:


151

আপনাকে লগিং সক্ষম করতে হবে।

(gdb) set logging on

কোন ফাইলটি ব্যবহার করতে হবে তা আপনি তা বলতে পারেন।

(gdb) set logging file my_god_object.log

এবং আপনি বর্তমান লগিং কনফিগারেশন পরীক্ষা করতে পারেন।

(gdb) show logging

15
এবং আপনি যদি আউটপুটটি কেবল লগ ফাইলে যেতে চান তবে ব্যবহার করুন set logging redirect on
বেন সি

5
আমাদের set logging file my_god_object.logআগে সেট করা উচিত নয় set logging on?
হার্পিস ফ্রি ইঞ্জিনিয়ার

এই প্লাস tail -fএবং awkআজ সত্যিই সহায়ক ছিল। ধন্যবাদ!
পুনরুদ্ধার

12

আমি খুঁজে পেয়েছি যে আপনি runকমান্ডের মাধ্যমে জিডিবি থেকে কোনও ফাইলে আউটপুট পুনর্নির্দেশ করতে পারেন :

(gdb) run > outfile

11
এটি প্রোগ্রামটি ডিবাগ হওয়ার আউটপুট হবে, জিডিবি থেকে আউটপুট হবে না। ওপি জিডিবির নিজস্ব আউটপুট লগ করতে চেয়েছিল।
পল


@ তেপল তবে এটি আসলে খুব দরকারী কারণ আমি একটি কিউটি প্রোগ্রামটি ডিবাগ করছি যা কেবল জিডিবি'র স্টিডিনকে তার কিউডিগুগ আবর্জনার সাথে ট্র্যাশ করে
রোস্টামন739

@ rostamn739 ওহো, একেবারেই সাহায্য করেনি
Rostamn739

12

@ কোবডআপের উত্তরে বাড়ানো হচ্ছে

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

-exসুইচ একটি GDB কমান্ড রান। সুতরাং উপরের মূল ফাইলটি লোড করে, btকমান্ড চালায় , তারপরে quitকমান্ড দিন। আউটপুট backtrace.logস্ক্রিনে লিখিত হয় এবং।

আর একটি দরকারী জিডিবি আহ্বান (সমস্ত থ্রেড থেকে স্থানীয় ভেরিয়েবলের সাথে স্ট্যাকট্রেস প্রদান)

gdb core.3599 -ex 'thread apply all bt full' -ex quit

কিছু সিস্টেমে আপনাকে টাইপ করতে হবেgdb -c core.3599 ...
ইউজার 7610

1
> জিডিবি কোর ৩৩৯৯-এক্স 'থ্রেডটি সমস্ত বিটি পূর্ণ' প্রয়োগ করুন -পদ্ধতি ছাড়ুন - প্রম্পট ছাড়াই চালানোর জন্য - ব্যাচ যুক্ত করুন - ইড সুডো জিডিবি - ব্যাচ কোর ৩৩৯৯-এক্স 'থ্রেডটি সমস্ত বিটি পূর্ণ' -েক্সট প্রস্থান> আউটপুট প্রয়োগ করে .log
ডেভিড স্কেলি

9

Https://sourceware.org/gdb/onlinesocs/gdb/Logging- আউটপুট. html থেকে :

আপনি জিডিবি কমান্ডের আউটপুট একটি ফাইলে সংরক্ষণ করতে পারেন। জিডিবির লগিং নিয়ন্ত্রণের জন্য বেশ কয়েকটি কমান্ড রয়েছে।

set logging on

লগিং সক্রিয়.

set logging off

লগিং অক্ষম করুন।

set logging file file

বর্তমান লগফিলের নাম পরিবর্তন করুন। ডিফল্ট লগফিল হ'ল gdb.txt।

set logging overwrite [on|off]

ডিফল্টরূপে, জিডিবি লগফাইলে সংযুক্ত হবে। পরিবর্তে লগফাইলে ওভাররাইট করতে লগইন সেট করতে চাইলে ওভাররাইট সেট করুন।

set logging redirect [on|off]

ডিফল্টরূপে, gdb আউটপুট টার্মিনাল এবং লগফাইলে উভয় যায়। আপনি যদি লগ ফাইলটিতে কেবল আউটপুট যেতে চান তবে পুনর্নির্দেশ সেট করুন।

show logging

লগিং সেটিংসের বর্তমান মানগুলি দেখান।



5

আউটপুটটি দেখার পরেও কোনও ফাইলে জিডিবি লগ করার একটি সহজ পদ্ধতি (যা লিখিত আদেশগুলি সহজ করে) ব্যবহার করা হয় tee:

gdb command |& tee gdb.log

1

যদিও এখানে অনেক ভাল উত্তর রয়েছে, তবে এখনও আমার পক্ষে কাজ করা একমাত্র জিনিসটি পোস্ট করতে হবে:

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

এটি একই লগ.টেক্সট ফাইলটিতে জিডিবি এবং বাইনারি আউটপুট পাওয়ার একমাত্র উপায় ছিল , যখন এটি কনসোলেও দেখছিল।

সম্পাদনা করুন:

সতর্কতা: আউটপুট gdb আউটপুট এবং বাইনারি আউটপুট মধ্যে আংশিকভাবে সিঙ্ক হয় না বলে মনে হচ্ছে। কেউ কি নিশ্চিত করতে পারবেন? আপনি আপনার কনসোলটিতে যে আউটপুট দেখতে পান তা লগ করার জন্য আপনার টেলনেট / এসএসএস ক্লায়েন্টের কোনও ফাংশন রয়েছে কিনা তা আপনি পরীক্ষা করতে চাইতে পারেন।


1

আপনার এখানে একাধিক উত্তর ছিল। তারা সংশোধন করা হয়। আমি কেবল একটি কমান্ড যুক্ত করতে চাই যা আপনাকে একবারে সমস্ত আউটপুট সংগ্রহ করতে সহায়তা করবে। আপনার বিশাল ব্যাকট্র্যাস সংগ্রহ করার সময় এটি সত্যিই সহায়ক। কোনও লগিং কনফিগারেশন করার আগে এটি করুন:

(gdb)set height 0

আমি এই নিবন্ধটিতে এটি পেয়েছি: https://askaralikhan.blogspot.com/2016/05/gdb-all-threads-bt-to-file.html?showComment=1584614942454#c4584028195226351332

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