Gdb डिबगर के लिए सबसे मुश्किल / उपयोगी कमांड [बंद]


138

क्या आप gdb या dbx जैसे डिबगर चलाते समय अपनी सबसे ट्रिकी और उपयोगी कमांड पोस्ट कर सकते हैं।


मैंने पाया कि यह दस्तावेज अच्छा है। scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/…
रिक

जवाबों:


134
  1. बैकट्रेस फुल : लोकल वैरिएबल के साथ पूरा बैकट्रेस
  2. ऊपर , नीचे , फ्रेम : फ्रेम के माध्यम से आगे बढ़ें
  3. घड़ी : किसी निश्चित शर्त के पूरा होने पर प्रक्रिया को स्थगित करें
  4. प्रिंट सुंदर पर सेट करें : प्रिंटों को पूर्व में सी स्रोत कोड स्वरूपित किया गया
  5. लॉगिंग सेट करें : समर्थन के लिए दूसरों को दिखाने के लिए डीबगिंग सत्र लॉग करें
  6. प्रिंट सरणी पर सेट करें : सुंदर सरणी मुद्रण
  7. खत्म : समारोह के अंत तक जारी रखें
  8. सक्षम और अक्षम करें: ब्रेकपॉइंट को सक्षम / अक्षम करें
  9. tbreak : एक बार ब्रेक लें, और फिर ब्रेकपॉइंट हटा दें
  10. जहां : वर्तमान में लाइन नंबर निष्पादित किया जा रहा है
  11. जानकारी स्थानीय : सभी स्थानीय चर देखें
  12. जानकारी args : सभी फ़ंक्शन तर्क देखें
  13. सूची : स्रोत देखें
  14. प्रकोप : नियमित अभिव्यक्ति से मेल खाने वाले फ़ंक्शन पर ब्रेक

7
info locals- सभी स्थानीय चर देखें; सूची - स्रोत देखें; नियमित अभिव्यक्ति से मेल खाने वाले समारोह पर ब्रेक।
पॉल बिगगर

source / path / to / मैक्रो / फ़ाइल और मेरे सभी निफ्टी मैक्रोज़ सेकंड में डीबग करने में मेरी मदद करने के लिए हैं।
सुधांशु

1
set print object onपॉलीमॉर्फिक तत्वों के लिए और set print elements 0दो कमांड हैं जिनका मैं बहुत बार उपयोग करता हूं। बहुत उपयोगी है।
किरिल किरोव

1
भी, t a a bt(अर्थ thread apply all backtrace)। (लगभग) सभी अन्य कमांड के साथ इस्तेमाल किया जा सकता है। विशेष रूप से उपयोगी है bt full
किरिल किरोव

101

टेक्स्ट यूजर इंटरफेस के साथ gdb शुरू करें

gdb -tui

21
मैं विश्वास नहीं कर सकता कि यह सुविधा मुझे इन सभी वर्षों के लिए बच गई। धन्यवाद धन्यवाद धन्यवाद!
देवसोलर

थैंक यू आपने मेरा बहुत समय बचाया .. वंडरफुल ....
sujin

1
और दूसरा: <minus> RET
SullX

1
या cgdb का
Patryk

बहुत अच्छी सुविधाएँ। यह अब तक याद किया ...
प्रवीणमैक्स

45

Gdb 7.0 में शुरू, प्रतिवर्ती डिबगिंग है , इसलिए आपकी नई पसंदीदा कमांड हैं:

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

21

"-Tui" परम के साथ GDB को लॉन्च करने के बजाय आप "wh" टाइप करके कुछ समय बाद टेक्स्ट मोड पर भी स्विच कर सकते हैं।


3
Ctrl-a एक 'सामान्य' कमांड लाइन दृश्य पर वापस जाने के लिए!
केविन

2
"- 'का इस्तेमाल' क 'के लिए किया जा सकता है। बेहतर को कम करें .. :)
raj_gt1

6
Ctrl-a a? क्या यह मज़ाक हैं? अधिक tmux/ screenकमांड की तरह दिखता है । और मेरे लिए काम नहीं करता है। यह से एक होना चाहिए के रूप में प्रति डॉक्स : C-x C-a, C-x a, C-x A
एक्स-यूरी

यह वास्तव में है C-x a। तुम भी साथ दृश्य स्विच कर सकते C-x 1हैं और C-x 2जब टुइ मोड में देखने के लिए विधानसभा के साथ-साथ (यदि आवश्यकता हुई)।
सैम व्हाइटलॉक

16

thread apply all btया thread apply all print $pc: यह पता लगाने के लिए कि सभी धागे क्या कर रहे हैं।


यह वह आज्ञा थी जिसे मैं लंबे समय से देख रहा था! एक-एक करके सभी 30 धागों की जाँच करना वास्तव में बुरा है!
तोथफू


6

-command=<file with gdb commands>Gdb फायरिंग करते समय विकल्प का उपयोग करना । के रूप में ही -x <command file>। इस कमांड फाइल में gdb कमांड हो सकते हैं जैसे ब्रेकपॉइंट, विकल्प आदि, विशेष रूप से निष्पादन योग्य जरूरतों के लिए जब gdb का उपयोग करके क्रमिक डिबग रन के माध्यम से रखा जाना चाहिए।


आप -iexgdb कमांड लाइन पर अलग-अलग कमांड जोड़ने के विकल्प का भी उपयोग कर सकते हैं ।
doug65536

5

स्क्रिप्टिंग gdb एक अच्छी ट्रिक है, इसके अलावा, जब मैं एक में कदम रख रहा हूं तो अन्य थ्रेड्स को चलाने से रोकने के लिए मुझे शेड्यूलर लॉक ऑन / ऑफ करना पसंद है।


1
आप शेड्यूलर लॉकिंग कैसे सेट करते हैं?
deft_code

3
set scheduler-locking onअंदर gdb
बेन

आप इसे कैसे डिफ़ॉल्ट बनाते हैं? मैंने इसे आजमाया।।
ओमेरी यादन

4
  • का उपयोग करते हुए .gdbinit (फ़ाइल जहां gdb से मैक्रो और कॉल लिख सकते हैं शुरू)। अपने घर निर्देशिका में .gdbinit रखें ताकि इसे हर बार उठाया जाए जब gdb लोड हो जाए
  • सभी सक्रिय थ्रेड्स को सूचीबद्ध करने के लिए जानकारी थ्रेड्स , और f (#) -> # थ्रेड नंबर जिसे आप स्विच करना चाहते हैं

  • कभी-कभी मैं gdb का उपयोग हेक्स से दशमलव या बाइनरी में परिवर्तित करने के लिए करता हूं, इसकी गणना कैलकुलेटर खोलने के बजाय बहुत आसान है

    • p / d 0x10 -> दशमलव 0x10 के बराबर देता है
    • p / t 0x10 -> बाइनरी 0x10 के बराबर
    • p / x 256 -> हेक्स समतुल्य 256

4

चाइल्ड प्रोसेस देखने के लिए विकल्प -tui के साथ gdb शुरू करने के बजाय, जिसमें एक स्क्रीन होती है जिसमें हाइलाइट होता है जहां कोड की एक्ज़ीक्यूटिंग लाइन आपके प्रोग्राम में होती है, इस फ़ीचर से Cx o और Cx a में कूदें। यह उपयोगी है यदि आप सुविधा का उपयोग कर रहे हैं और अस्थायी रूप से इसका उपयोग नहीं करते हैं तो आप पिछले कमांड को प्राप्त करने के लिए अप-एरो का उपयोग कर सकते हैं।


2
आप फ़ोकस को कमांड विंडो में बदल सकते हैं focus cmdताकि ऊपर / नीचे तीर काम कर सकें। आप का उपयोग कर वापस स्विच focus src
नाथन फेलमैन

3

यह उपयोगी हो सकता है, मुझे यकीन है कि इसमें सुधार किया जा सकता है, हालांकि स्वागत है:

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

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