ইন্টারেক্টিভ ডিবাগিংয়ের সময় কীভাবে জিডিবি আউটপুট হাইলাইট এবং রঙ করবেন?


172

দয়া করে জবাব করবেন না আমার ডিডি, নেমাইভার, ইমাস, ভিএম, বা অন্য কোনও ফ্রন্ট-এন্ড ব্যবহার করা উচিত, আমি কেবল জিডিবি পছন্দ করি তবে কিছু টার্মিনাল রঙের সাথে এর আউটপুটটি দেখতে চাই।


4
এটি আপনাকে রঙ দেয় না (সুতরাং আমি এটিকে উত্তর বলব না), তবে কিছু। / .Gdbinit কনফিগারেশন অভিজ্ঞতা উন্নত করবে। আমি এটি খালি ন্যূনতম হিসাবে ব্যবহার করি: সেট মুদ্রণ সেট সেট প্রিন্টে প্রিটি সেট আউটপুট-রেডিক্স 16 সেট উচ্চতা 0
অ্যাক্টিভেট.স

স্বীকৃত উত্তরটি পরিবর্তন করা ভাল লাগবে তাই আমার পুরানো, ভুল উত্তর মুছতে পারে। ধন্যবাদ।
ddaa

একবার উপর হাইলাইট বর্তমান লাইন lবাস্তবায়িত পরার sourceware.org/bugzilla/show_bug.cgi?id=21044 , আমি শুধু যোগ করব lএকটি থেকে hook-stopএবং দেব নির্বাণ লিখুন।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

উত্তর:


183

.gdbinit

আপনি ~/.gdbinitরঙ থাকতে পারে আপনার টুইট করতে পারেন। আপনি .gdbinitএখানে উপলভ্য ম্যামন ব্যবহার করতে পারেন :

https://github.com/gdbinit/gdbinit

আপনি এটি যতটা চান তত্ক্ষণিক করতে পারেন। এই উত্তরের জন্য আমি এই ধন্যবাদ খুঁজে পেয়েছি । আপনি যে ধরণের আউটপুট পেতে পারেন তা এখানে:

.gdbinit

একটি গিটহাব সংগ্রহস্থলও উপলভ্য: https://github.com/gdbinit/Gdbinit

পার্শ্ব নোটে, একই ধারণাটি এলএলডিবিতে প্রয়োগ করা হয়েছিল

জিডিবি ড্যাশবোর্ড

একই ধারণা অনুসরণ করে, জিডিবি ড্যাশবোর্ড পাইথনের জিডিবি-র জন্য একটি মডুলার ভিজ্যুয়াল ইন্টারফেস সরবরাহ করে।

জিডিবি ড্যাশবোর্ড

(অকার্যকর) ভ্রমণকারী

অনুরূপ অন্য একটি প্রকল্প আরও এক্সটেনসিবিলিটি প্রদানের জন্য জিডিবির পাইথন সমর্থন ব্যবহার করে, তাই এটি চেক করার মতো: https://github.com/dholm/voidwalker

@Dholm তার নিজস্ব .gdbinit পূর্ববর্তীটি থেকে অনুপ্রাণিতও সরবরাহ করে।

(অকার্যকর) ভ্রমণকারী

pwndbg

কিছু প্রকল্প উন্নত ডিসপ্লে সহ দরকারী কার্যকারিতার একটি সেট সরবরাহ করে। এটি পেদা বা pwndbg এর ক্ষেত্রে । পরেরটি নিম্নলিখিত বিবরণ দেয়:

একটি পেদা প্রতিস্থাপন। আমাদের ভালো বন্ধু আত্মা windbg, pwndbgউচ্চারণ করা হয় pwnd-bag

  • গতি
  • স্থিতিস্থাপকতা
  • পরিষ্কার কোড

এটি ডিবাগিং সমর্থন এবং পিএডিএ-র মতো উন্নয়নের শোষণ এবং আরও ভাল প্রদর্শন (যদিও এটি প্রকল্পের মূল ফোকাস নয়) সরবরাহ করে commands সফ্টওয়্যারটি এখনও বিকাশাধীন, এবং এখনও সঠিকভাবে প্রকাশ করা হয়নি।

pwndbg

voltron

প্রকল্পের বর্ণনা পদ বলে:

ভোল্ট্রন হ্যাকারদের জন্য একটি এক্সটেনসিবল ডিবাগার ইউআই। এটি আপনাকে আপনার ডিবাগার (এলএলডিবি বা জিডিবি) -র সাথে অন্যান্য টার্মিনালগুলিতে চলমান ইউটিলিটি ভিউগুলি সংযুক্ত করার অনুমতি দেয়, উদাসীনতা, স্ট্যাকের বিষয়বস্তু, রেজিস্ট্রার মান ইত্যাদির মতো দরকারী তথ্য প্রদর্শন করার সময়, আপনাকে একই ডিবাগার সিএলআই দেওয়ার সময়ও।

.gdbinitএটি স্বয়ংক্রিয়ভাবে সংহত করতে আপনি নিজের পরিবর্তন করতে পারেন । তবে, ডিসপ্লেটি নিজেই জিডিবির বাইরে রয়েছে (যেমন একটি টেমাক্স বিভাজনে)।

voltron

GEF

জিইএফ হ'ল অন্য বিকল্প, এবং এটি বর্ণনা করা হয়েছে:

এটি গতিশীল বিশ্লেষণের প্রক্রিয়া চলাকালীন এবং বিকাশকে কাজে লাগানোর জন্য পাইথন এপিআই ব্যবহার করে জিডিবিতে অতিরিক্ত বৈশিষ্ট্য সরবরাহ করার জন্য, বেশিরভাগ শোষক এবং বিপরীত ইঞ্জিনিয়ারদের দ্বারা ব্যবহার করার লক্ষ্য।

GEF


আপনার উত্তরের জন্য অনেক ধন্যবাদ, আপনি কীভাবে নিবন্ধের আউটপুটটি স্যুইচ করবেন তা সম্পর্কে ধারণা আছে? (আমি সি ++ কোডের জন্য জিডিবি ব্যবহার করছি এবং
এখনই এসেমব্লার

হ্যাঁ. অভিশাপ "মন্তব্যগুলির দৈর্ঘ্য কমপক্ষে 15 টি হতে হবে" "
ভাক

1
@ বৌ আপনি কি চেষ্টা করেছেন set $SHOWCPUREGISTERS = 0? মূলত আপনি কয়েকটি প্যারামিটার পেয়েছেন যা আপনি সেট করতে পারেন এবং আপনি সর্বদা আপনার প্রয়োজন অনুসারে কোডটি সংশোধন করতে পারেন।
বেনসি

100

এটি রঙ নয়, জিডিবির পাঠ্য গুই বিবেচনা করুন । এটি ব্যবহারযোগ্য জিডিবিতে বিস্তৃত পার্থক্য করে।

আপনি এটি দিয়ে চালু করতে পারেন:

gdb -tui executable.out

স্ক্রীনশট:

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন, প্রধান বৈশিষ্ট্যগুলি হ'ল:

  • আমরা উত্সের কোন রেখা এবং তার চারপাশের লাইনে রয়েছি তা দেখায়
  • ব্রেকপয়েন্টগুলি দেখায়

5
কি দারুন! ধন্যবাদ! আমি জিডিবির আশেপাশে একটি দুর্দান্ত গ্রাফিকাল শেলটির জন্য দীর্ঘ সময় খুঁজছিলাম, এবং আমি এক্সএক্সজিডিবি, কেজিডিবি এবং ডিডি চেষ্টা করেছি, কিন্তু তাদের মধ্যে কেউই আমার পক্ষে খুব ভাল কাজ করেনি, তাই আমি সরল পুরাতন কমান্ড লাইন ইন্টারফেসের সাথে আটকেছি। তবে এটি একেবারে নিখুঁত!
টমাস প্যাড্রন-ম্যাকার্থি

46
Ctrl-x Ctrl-a: পাঠ্য গুই মোডে এবং স্যুইচ করতে এটি লিখুন, কমান্ড লাইন বিকল্প ছাড়াই কাজ করে।
jturcotte

2
প্রোগ্রাম থেকে stdout মুদ্রণ আমার জন্য ইন্টারফেস বিরতি। এটি পুনঃনির্দেশিত করার পাশাপাশি কোনও কাজের সমাধান?
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

1
ইন্টারফেস ভাঙা স্টাডাউট নিয়েও আমি একই সমস্যা পেয়েছি। Ctrl-L বা আপনার পুনরায় আঁকা বাঁধাই যা কিছু হোক না কেন এটি অন্তত ব্যবহারযোগ্য করে তোলে। Vi সম্পাদনা মোড সক্ষম ব্যক্তিদের জন্য, Ctrl-X Ctrl-A কাজ করে না, তবে 'লেআউট এসসিআর' কমান্ডটি আপনাকে চিত্রের মতো প্রদর্শিত উত্সের সাহায্যে টিউআইআই মোডে রাখবে।
উইলিওম্পা

1
দ্বিতীয় টার্মিনালটি খুলুন এবং তারপরে কমান্ডটি জারি করুন: ty tty gdb অধিবেশন থেকে সেই টার্মিনালে স্ট্যান্ডআউটকে (gdb) সেট নিকৃষ্ট-টিটি কমান্ড ব্যবহার করে সরাসরি ফলাফলটি ব্যবহার করুন। প্রাক্তন। আমার .gdbinit থেকে নিকৃষ্ট-টিটি / দেব / টিটি 2 সেট করুন এখন আপনার স্টাডাউট গণ্ডগোল করবে না $ gdb -tui।
নেটস্কিঙ্ক

46

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


2
sudo apt-get ইনস্টল সিজিডিবি
cs01

2
একটি বাস্তব লাভজনক আবিষ্কারের :)
অজ্ঞ

এটি কেবল চালানোর চেষ্টা করেছেন: এটি কোনও জিডিবি ইতিহাস দেখতে পাচ্ছে না, এবং এটির একটি স্ক্রু আপ প্রম্পটও রয়েছে, যেখানে ক্যারেট এবং প্রকৃত জায়গার মাঝে কিছু শ্বেত স্পেস রয়েছে যেখানে চিহ্নটি টাইপ করা হচ্ছে (এটি সম্ভবত কারণ আমার একটি রঙিন প্রম্পট রয়েছে জিডিবি ) । মোটেই মুগ্ধ নয়।
হাই-অ্যাঞ্জেল

19

রঙের ব্যবহারের মাধ্যমে জিডিবি'র উপস্থিতি ব্যাপকভাবে বাড়ানো সম্ভব। এটি নিম্নলিখিত যে কোনও পদ্ধতির মাধ্যমে করা হয়:

  1. "সেট প্রম্পট" এর মাধ্যমে রঙিন প্রম্পট। উদাহরণস্বরূপ, প্রম্পটটিকে গা bold় এবং লাল করুন:

    set prompt \033[1;31m(gdb) \033[m

    বা প্রম্পটকে নতুন আকার, গা bold় এবং লাল করুন:

    set prompt \033[01;31m\n\n#####################################> \033[0m

    এখানে চিত্র বর্ণনা লিখুন

  2. হুকের মাধ্যমে বর্ণযুক্ত কমান্ড

  3. "তালিকা" কমান্ডের বর্ণযুক্ত সিনট্যাক্স হাইলাইট করা।

সমস্ত উদাহরণ মাইকেল কেলহেরের দ্বারা লিখিত নিম্নলিখিত ব্লগ পোস্টগুলিতে পাওয়া যায়:

"জিডিবি সুন্দরী করুন", 12 ই মে, 2010 (আর্কাইভ.অর্গের মাধ্যমে)

"পরীক্ষামূলক জিডিবি সিনট্যাক্স হাইলাইটিং", 15 ই মে, 2010 (আর্কাইভ.অর্গের মাধ্যমে)


14
লিঙ্কগুলি নষ্ট হয়ে গেছে।
জন কার্টার

7
@ মাইক: সাইটগুলি আর অ্যাক্সেসযোগ্য নয় এবং রোবটস.টিএসটি আর্কাইভ.আর.এক্সটিকে সূচীকরণ থেকে বাধা দিয়েছে বলে এখানে লিঙ্কগুলির লিখিত সামগ্রীগুলি এখানে পোস্ট করা কার্যকর হবে।
লুসিয়ান অ্যাড্রিয়ান গ্রিজিঙ্কু

1
আপনি এখানে প্রাসঙ্গিক তথ্য পেতে পারেন: সোর্সওয়্যার.আর.ইগ.
জিডিবি

1
লিঙ্কগুলি এখন ব্লগ পোস্টগুলির একটি আর্কাইভ.অর্গের ক্যাশে দেখানো হয়েছে।
অ্যালেক্স কুইন

1
@ মাইক, মনে হচ্ছে আপনি ব্লগ পোস্টের লেখক; যদি তা হয় তবে আপনার উত্তরটি প্রকাশ করা উচিত।
ডেভিড জেড

13

আসন্ন জিডিবি 8.3 এ নতুন !

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS

টার্মিনাল স্টাইলিং এখন সিএলআই এবং টিইউআইয়ের জন্য উপলব্ধ। জিএনইউ উত্স হাইলাইট অতিরিক্ত উত্স কোড স্নিপেট স্টাইল সরবরাহ করতে ব্যবহৃত হতে পারে। আরও তথ্যের জন্য নীচে "সেট স্টাইল" কমান্ডগুলি দেখুন।

জিডিবি 8.2.91.20190401-23.fc30 এর স্ক্রিনশট


সর্বকালের সেরা উত্তর! gdb 8.3 মিডিয়াম.com / @simonconnah/… কীভাবে ইনস্টল করবেন সে সম্পর্কে আপনি এখানে একটি টিউটোরিয়াল পেতে পারেন , আপনার মেশিনটির কমপক্ষে 512MB র্যামের প্রয়োজন আছে তা নোট করুন , অন্যথায়, gccসংকলকটি ট্র্যাশ শুরু করবে।
ব্যবহারকারী

7
#into .gdbinit
shell mkfifo /tmp/colorPipe

define hook-disassemble
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end 

define hookpost-disassemble
hookpost-list
end 

define hook-list
echo \n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end 

define hookpost-list
set logging off 
set logging redirect off 
shell sleep 0.1s
end 

define hook-quit
shell rm /tmp/colorPipe
end 

define re
hookpost-disassemble
echo \033[0m
end 
document re
Restore colorscheme
end 

সতর্কতা: বগি কোনও টিইউআই সমর্থন নেই, 'ব্যবহারকারী-মোড' হ্যাক।

মূল অংশটি এখানে পেয়েছে এবং এটি কিছুটা সংশোধন করেছে। হাইলাইটের প্রয়োজন, সি ++ ফিল্ট। রংগুলি যদি ঝামেলা জাগ্রত হয় তবে পুনরায় কমান্ড দিন।


7

cgdb তুলনায় অনেক ভাল gdb -tui


একমত। আমার প্রোগ্রাম দ্বারা মুদ্রিত সরল রেখাগুলি gdb -tui এর কনসোলটি ট্র্যাশ করেছে। এটি সিজিডিবির অধীনে হয় না। বখশিশের জন্য ধন্যবাদ!
র্যান্ডাল কুক


4

আমি নিম্নরূপে হাইলাইট করতে চেয়েছিলাম: আমার উত্স ফাইলগুলির (লাইব্রেরিগুলির পরিবর্তে) স্ট্যাক ট্রেসের লাইনের উপর জোর দিন।

সমাধানটি ছিল জিডিবি-পাইথন (এমএসওয়াইএসে; লিনাক্সে সাধারণত gdbপাইথন অন্তর্নির্মিত ইতিমধ্যে আসে?), হুক backtrace, ব্যবহার

python stack_trace = gdb.execute('backtrace', False, True')

তারপরে stack_traceপাইথনের রেজিক্সগুলি দিয়ে প্রক্রিয়া করুন এবং সেগুলি মুদ্রণ করুন। বোল্ড এবং অন্যান্য রঙগুলি এই জাতীয় ক্রিয়াকলাপ দ্বারা অর্জন করা হয়:

def term_style(*v):
    """1 is bold, 30--37 are the 8 colours, but specifying bold may also
    change the colour. 40--47 are background colours."""
    return '\x1B['+';'.join(map(str, v))+'m'

#Use like this:
print term_style(1) + 'This will be bold' + term_style(0) #Reset.
print term_style(1,30) + 'This will be bold and coloured' + term_style(0)
print term_style(1,30,40) + 'Plus coloured background' + term_style(0)

হুক ব্যবহার করে এমন একটি কার্যকারী উদাহরণ - এমনকি ন্যূনতম হলেও - সম্ভবত এটি আরও স্বাগত হবে।
হাই-এঞ্জেল

4

রঙগুলির আরও একটি ভাল সংমিশ্রণ এই কনফিগারেশন দ্বারা দেওয়া হয়েছে । এটি ব্যাকট্রেসগুলি পরিদর্শন করা খুব সহজ করে তোলে। এটি ব্যবহার করতে, কেবল সেই ফাইলটি সংরক্ষণ করুন ~/.gdbinitএবং সাধারণভাবে জিডিবি চালান


ধন্যবাদ, আমি যা খুঁজছিলাম ঠিক এটাই ছিল। আমি একটি দীর্ঘ কল স্ট্যাক সহ একটি বহু-থ্রেডযুক্ত অ্যাপ্লিকেশনটি সন্ধান করছিলাম এবং এটি সেই ব্যাকট্রেসগুলির জন্য উপযুক্ত।
জোহান বিজেরেহল্ট

-2

আপনি যা রঙ চান তা পেতে পারেন;

# gdb
(gdb) shell echo -en '\E[47;34m'"\033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.