इंटरैक्टिव डिबगिंग के दौरान gdb आउटपुट को कैसे हाइलाइट और कलर करना है?


172

कृपया जवाब न दें कि मुझे ddd, nemiver, emacs, vim, या किसी भी अन्य फ्रंट-एंड का उपयोग करना चाहिए, मैं सिर्फ gdb को पसंद करता हूं, क्योंकि यह कुछ टर्मिनल रंगों के साथ इसके आउटपुट को देखना चाहता है।


4
यह आपको रंग नहीं देगा (इसलिए मैं इसे उत्तर नहीं कहूंगा), लेकिन कुछ ~ / .gdbinit कॉन्फ़िगरेशन अनुभव में सुधार करेगा। मैं इसे एक नंगे न्यूनतम के रूप में उपयोग करता हूं: सेट प्रिंट सेव सेट पर सुंदर सेट आउटपुट-मूलांक 16 सेट ऊंचाई 0
Activout.se

अच्छा होगा कि स्वीकार किए गए उत्तर को बदल दें, ताकि मेरे पुराने, गलत उत्तर को हटाया जा सके। धन्यवाद।
डीडीए

एक बार पर प्रकाश डाला वर्तमान पंक्ति lलागू किया जाता है sourceware.org/bugzilla/show_bug.cgi?id=21044 , मैं सिर्फ जोड़ देंगे lएक करने के लिए hook-stopऔर देव निर्वाण की प्राप्ति की।
सिरो संटिली 郝海东 冠状 iro 事件

जवाबों:


183

.gdbinit

आप अपने ~/.gdbinitरंग के लिए ट्वीक कर सकते हैं। आप मैमोन का उपयोग कर सकते हैं .gdbinitजो यहां उपलब्ध है:

https://github.com/gdbinit/gdbinit

आप इसे जितना चाहें उतना ट्वीक कर सकते हैं। मुझे यह एसओ उत्तर के लिए धन्यवाद मिला । इस प्रकार का आउटपुट है जिसे आप प्राप्त कर सकते हैं:

.gdbinit

एक GitHub रिपॉजिटरी भी उपलब्ध है: https://github.com/gdbinit/Gdbinit

एक साइड नोट पर, उसी विचार को lldb पर भी लागू किया गया था ।

GDB डैशबोर्ड

इसी अवधारणा के बाद, GDB डैशबोर्ड अजगर में GDB के लिए एक मॉड्यूलर दृश्य इंटरफ़ेस प्रदान करता है।

GDB डैशबोर्ड

(शून्य वाकर

एक और इसी तरह की परियोजना अधिक विस्तार प्रदान करने के लिए GDB के पायथन समर्थन का उपयोग करती है, इसलिए यह जांचने योग्य है: https://github.com/dholm/voidwalker

@ डडहोम भी अपने ही .gdbinit पिछले एक से प्रेरित प्रदान करता है ।

(शून्य वाकर

pwndbg

कुछ परियोजनाएँ बेहतर प्रदर्शन सहित उपयोगी कार्यों का एक सेट प्रदान करती हैं। यह बात लागू होती है पेडा या pwndbg । उत्तरार्द्ध निम्नलिखित विवरण देता है:

एक पेडा प्रतिस्थापन। हमारे अच्छे दोस्त की भावना में windbg, pwndbgउच्चारण किया जाता है pwnd-bag

  • गति
  • लचीलाता
  • साफ कोड

यह पेडा से लोगों के समान डिबगिंग और विकास का समर्थन करने के लिए कमांड प्रदान करता है, और बेहतर प्रदर्शन (हालांकि यह परियोजना का मुख्य फोकस नहीं है)। सॉफ्टवेयर अभी भी विकास के अधीन है, और अभी तक ठीक से जारी नहीं किया गया है।

pwndbg

Voltron

परियोजना विवरण कहता है:

Voltron हैकर्स के लिए एक एक्स्टेंसिबल डिबगर UI है। यह आपको अपने डिबगर (LLDB या GDB) के लिए अन्य टर्मिनलों में चल रहे उपयोगिता विचारों को संलग्न करने की अनुमति देता है, जबकि डिस्सैब, स्टैक सामग्री, रजिस्टर मान आदि जैसी उपयोगी जानकारी प्रदर्शित करता है, जबकि अभी भी आपको वही डीबगर सीएलआई दे रहा है।

आप .gdbinitइसे स्वचालित रूप से एकीकृत करने के लिए संशोधित कर सकते हैं । हालाँकि, प्रदर्शन स्वयं GDB के बाहर है (जैसे tmux विभाजन में)।

Voltron

GEF

GEF एक अन्य विकल्प है, और इसे निम्नानुसार वर्णित किया गया है:

इसका उद्देश्य ज्यादातर शोषकों और रिवर्स-इंजीनियरों द्वारा उपयोग किया जाना है, गतिशील विश्लेषण और शोषण विकास की प्रक्रिया के दौरान सहायता के लिए पायथन एपीआई का उपयोग करके जीडीबी को अतिरिक्त सुविधाएँ प्रदान करना।

GEF


आपके उत्तर के लिए बहुत धन्यवाद, क्या आपके पास एक विचार है कि रजिस्टर आउटपुट को कैसे स्विच किया जाए? (मैं सी ++ कोड के लिए gdb का उपयोग कर रहा हूं और तुरंत कोई कोडांतरक स्तर की आवश्यकता नहीं है)
vak

हाँ। लानत है "टिप्पणियां कम से कम 15 वर्णों की होनी चाहिए।"
वक

1
@वाक तुमने कोशिश की set $SHOWCPUREGISTERS = 0? मूल रूप से आपके पास कई पैरामीटर हैं जो आप सेट कर सकते हैं , और आप हमेशा अपनी आवश्यकताओं के अनुरूप कोड को संशोधित कर सकते हैं।
BenC

100

यह रंग नहीं है, लेकिन gdb के पाठ gui पर विचार करें । यह एक बड़ा फर्क पड़ता है कि gdb कितना उपयोगी है।

आप इसे इसके साथ लॉन्च कर सकते हैं:

gdb -tui executable.out

स्क्रीनशॉट:

यहां छवि विवरण दर्ज करें

जैसा कि आप देख सकते हैं, मुख्य विशेषताएं हैं:

  • दिखाता है कि हम किस स्रोत की रेखा पर और आसपास की रेखाएँ हैं
  • ब्रेकप्वाइंट दिखाता है

5
वाह! धन्यवाद! मैं एक लंबे समय के लिए देख रहा हूँ gdb के आसपास एक अच्छा चित्रमय खोल, और मैंने xxgdb, kgdb और ddd की कोशिश की है, लेकिन उनमें से कोई भी मेरे लिए बहुत अच्छा काम नहीं किया है, इसलिए मैं सादे पुराने कमांड लाइन इंटरफ़ेस के साथ फंस गया हूं। लेकिन यह बिल्कुल सही है!
थॉमस पैड्रॉन-मैककार्थी

46
Ctrl-x Ctrl-a: यह टेक्स्ट गुई मोड से स्विच करने के लिए दर्ज करें, कमांड लाइन विकल्प के बिना भी काम करता है।
jturcotte

2
प्रोग्राम से स्ट्रॉडआउट में प्रिंट करना मेरे लिए इंटरफेस को तोड़ता है। इसे पुनर्निर्देशित करने के अलावा कोई वर्कअराउंड?
सिरो सेंटिल्ली 郝海东 冠状 iro i 法轮功 '

1
मैं इंटरफ़ेस को तोड़ने के साथ एक ही समस्या प्राप्त करता हूं। Ctrl-L या जो भी आपका redraw बाइंडिंग है वह कम से कम उपयोग करने योग्य बनाता है। Vi संपादन मोड सक्षम लोगों के लिए, Ctrl-X Ctrl-A काम नहीं करता है, लेकिन कमांड 'लेआउट src' आपको छवि की तरह दिखाए गए स्रोत के साथ TUI मोड में डाल देगा।
विलीवाम्पा

1
एक दूसरा टर्मिनल खोलें और फिर कमांड जारी करें: $ tty परिणाम का उपयोग करने के लिए gdb सत्र से सीधे उस टर्मिनल पर (gdb) अवर-ट्टी कमांड सेट करें। पूर्व। मेरे .gdbinit से अवर-tty / dev / tty2 सेट करें अब आपका स्टडआउट $ gdb -tui को गड़बड़ नहीं करेगा।
नेट्सिंक

46

मुझे पता है कि आप एक दृश्यपटल नहीं चाहते थे। लेकिन कैसे cgdb के बारे में यह gdb के बहुत करीब है, यह टेक्स्टमोड है, लेकिन कोड पर सिंटैक्स हाइलाइट के साथ एक स्रोत विंडो ऊपर है।


2
sudo apt-get install cgdb
सीएस 01

2
एक वास्तविक दृश्यता :)
अज्ञानी

बस इसे चलाने की कोशिश की: यह किसी भी gdb इतिहास को नहीं देखता है, और इसमें एक त्वरित संकेत भी है, जहां कैरट और वास्तविक स्थान के बीच कुछ व्हाट्सएप है जहां प्रतीक टाइप किया जा रहा है (यह संभावना है क्योंकि मेरे पास एक रंगीन संकेत है जीडीबी ) । बिल्कुल प्रभावित नहीं हुए।
हाय-एंजेल

19

रंगों के उपयोग के माध्यम से जीडीबी के दिखावे को बढ़ाना संभव है। यह निम्नलिखित विधियों में से किसी के माध्यम से किया जाता है:

  1. "सेट प्रॉम्प्ट" के माध्यम से रंगीन संकेत। जैसे, प्रॉम्प्ट को बोल्ड और लाल करें:

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

    या संकेत को एक नया आकार दें, बोल्ड और लाल:

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

    यहां छवि विवरण दर्ज करें

  2. हुक के माध्यम से रंगीन कमांड

  3. "सूची" कमांड के हाइलाइट किए गए रंगीन सिंटैक्स।

सभी उदाहरण माइकल केलर द्वारा लिखित निम्नलिखित ब्लॉग पोस्ट पर उपलब्ध हैं:

"सुशोभित जीडीबी", 12 मई, 2010 (आर्काइव.ऑर्ग के माध्यम से)

"प्रायोगिक GDB सिंटैक्स हाइलाइटिंग", 15 मई, 2010 (आर्काइव.ऑर्ग के माध्यम से)


14
लिंक टूट गए हैं।
जॉन कार्टर

7
@ माइक: यह उन लिंक्स की सामग्रियों को यहां पोस्ट करने के लिए उपयोगी होगा क्योंकि साइट अब सुलभ नहीं है और robots.txt ने इसे संग्रहीत करने से संग्रह.org को रोका।
लुकियन एड्रियन ग्रिंजिन्यू

1
आप संबंधित जानकारी यहाँ से प्राप्त कर सकते हैं: sourceware.org/gdb/current/onbuildocs/gdb/Prompt.html
musiphil

1
लिंक अब ब्लॉग पोस्टों के एक आर्काइव.ऑर्ग के लिए इंगित किए गए हैं।
एलेक्स क्विन

1
@ माइक, ऐसा प्रतीत होता है कि आप ब्लॉग पोस्ट के लेखक हैं; यदि हां, तो आपको उत्तर में यह खुलासा करना चाहिए।
डेविड जेड

13

आगामी GDB 8.3 में नया !

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

टर्मिनल स्टाइलिंग अब CLI और TUI के लिए उपलब्ध है। GNU सोर्स हाइलाइट अतिरिक्त रूप से सोर्स कोड स्निपेट्स की स्टाइलिंग प्रदान करने के लिए उपयोग किया जा सकता है। अधिक जानकारी के लिए, नीचे "सेट स्टाइल" कमांड देखें।

जीडीबी का स्क्रीनशॉट 8.2.91.20190401-23.fc30


सबसे अच्छा जवाब कभी! आप यहां पर एक ट्यूटोरियल पा सकते हैं कि कैसे gdb 8.3 मध्यम स्थापित करें । @simonconnah/… , ध्यान दें कि आपकी मशीन को कम से कम 512MB RAM की आवश्यकता है, अन्यथा, 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 

चेतावनी: छोटी गाड़ी कोई TUI समर्थन, 'उपयोगकर्ता-मोड' हैक।

यहां मुख्य भाग मिला और इसे थोड़ा संशोधित किया। हाइलाइट्स की जरूरत है, सी ++ फिल्ट। यदि रंग गड़बड़ हो जाता है तो फिर से जारी करें।


7

cgdb से बहुत बेहतर है gdb -tui


माना। मेरे प्रोग्राम द्वारा छपी हुई सरल लाइनों ने gdb -tui के कंसोल को ट्रैश किया। Cgdb के तहत ऐसा नहीं होता है। पारितोषिक के लिए धन्यवाद!
रान्डेल कुक


4

मैं निम्नानुसार हाइलाइट करना चाहता था: स्टैक ट्रेस की रेखाओं पर जोर देना जो मेरे स्रोत फ़ाइलों (पुस्तकालयों के बजाय) से संबंधित हैं।

इसका समाधान gdb-python (MSYS पर) लिनक्स पर आमतौर पर 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

रंगों का एक और अच्छा संयोजन इस कॉन्फ़िगरेशन द्वारा दिया गया है । यह एक बहुत आसान backtraces का निरीक्षण प्रदान करता है। इसका उपयोग करने के लिए, बस उस फाइल को सेव करें ~/.gdbinitऔर सामान्य रूप से gdb चलाएं


धन्यवाद, यह वही था जो मैं देख रहा था। मैं एक लंबे कॉल स्टैक के साथ एक बहु-थ्रेडेड एप्लिकेशन में देख रहा था और यह उन बैकट्रैक के लिए एकदम सही है।
जोहान Bjäreholt

-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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.