GDB hata ayıklayıcı için en zor / kullanışlı komutlar [kapalı]


138

Gdb veya dbx gibi bir hata ayıklayıcıyı çalıştırırken en zor ve kullanışlı komutlarınızı gönderebilir misiniz?


Bu belgelerin iyi olduğunu gördüm. scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/…
Rick

Yanıtlar:


134
  1. backtrace full : Yerel değişkenlerle komple backtrace
  2. yukarı , aşağı , çerçeve : Çerçeveler arasında hareket etme
  3. watch : Belirli bir koşul karşılandığında işlemi askıya alma
  4. yazdırmayı güzel ayarla : Güzel biçimlendirilmiş C kaynak kodunu yazdırır
  5. günlüğe kaydetmeyi ayarlama : Destek için başkalarına gösterilecek günlük hata ayıklama oturumu
  6. baskı dizisini ayarla : Güzel dizi baskısı
  7. bitiş : İşlev sonuna kadar devam et
  8. etkinleştir ve devre dışı bırak : Kesme noktalarını etkinleştir / devre dışı bırak
  9. tbreak : Bir kez kırın ve ardından kesme noktasını kaldırın
  10. burada : Satılmakta olan satır numarası
  11. info locals : Tüm yerel değişkenleri görüntüle
  12. info args : Tüm işlev bağımsız değişkenlerini görüntüle
  13. list : kaynağı görüntüle
  14. rbreak : normal ifadeyle eşleşen işlevi kır

7
info locals- Tüm yerel değişkenleri görüntüleyin; list - kaynağı görüntüle; rbreak - düzenli ifadeyle eşleşen fonksiyon.
Paul Biggar

source / path / to / macro / file Ve tüm şık makrolarım saniyeler içinde hata ayıklamama yardımcı olacak.
Sudhanshu

1
set print object onpolimorfik elementler için ve set print elements 0çok sık kullandığım iki komut. Oldukça kullanışlı.
Kiril Kirov

1
Ayrıca, t a a bt(anlam thread apply all backtrace). Diğer tüm komutlarla (neredeyse) kullanılabilir. Özellikle kullanışlıdır bt full.
Kiril Kirov

101

Metin kullanıcı arabirimi ile gdb'yi başlatma

gdb -tui

21
Bu özelliğin tüm bu yıllar boyunca benden kaçtığına inanamıyorum. Teşekkürler teşekkürler teşekkürler!
DevSolar

Teşekkürler Zamanımı çok kurtardın .. Wonderfull ....
sujin

1
Ve başka bir şey: <minus> RET
SullX

1
veya cgdb
Patryk

çok güzel özellikler. Şimdiye kadar kaçırdım ...
PraveenMax

45

Gdb 7.0'dan başlayarak, tersine çevrilebilir hata ayıklama vardır , bu nedenle yeni favori komutlarınız:

* 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

GDB'yi "-tui" parametresiyle başlatmak yerine, bir süre sonra "wh" yazarak da metin moduna geçebilirsiniz.


3
'Normal' komut satırı görünümüne geri dönmek için Ctrl-a!
Kevin

2
"- '' wh '' nin instaed kullanılabilir. daha kısa daha iyi .. :)
raj_gt1

6
Ctrl-a a? Bu bir şakamı? tmux/ screenCommand gibi görünüyor . Ve benim için çalışmıyor. Bu biri olmalı olarak başına docs : C-x C-a, C-x a, C-x A.
x-yuri

Aslında C-x a. Ayrıca montajı görmek için tui modundayken C-x 1ve ile görünümler C-x 2arasında geçiş yapabilirsiniz (gerekirse).
Sam Whitlock

16

thread apply all btveya thread apply all print $pc: Tüm ipliklerin ne yaptığını çabucak bulmak için.


Uzun zamandır aradığım komut buydu! 30 ipliğin tümünü tek tek kontrol etmek gerçekten kötü!
tothphu


6

-command=<file with gdb commands>GDB'yi ateşlerken seçeneği kullanma . İle aynı -x <command file>. Bu komut dosyası, kesme noktaları, seçenekler vb. Gibi gdb komutları içerebilir. Belirli bir yürütülebilir dosyanın gdb kullanarak art arda hata ayıklama işlemlerinden geçirilmesi gerektiğinde kullanışlıdır.


Ayrıca -iexgdb komut satırına ayrı komutlar ekleme seçeneğini de kullanabilirsiniz .
doug65536

5

komut dosyası gdb iyi bir hile, bunun dışında bir adım adım diğer iş parçacıklarının çalışmasını önlemek için zamanlayıcı kilitleme açık / kapalı ayarlamak gibi.


1
Zamanlayıcı kilidini nasıl ayarlarsınız?
deft_code

3
set scheduler-locking ongdb içinde
Ben

bunu nasıl varsayılan yaparsın? Denedim .gdbinit ama gdb /home/omry/.gdbinit:1 yazdırır: Kaynaklı komut dosyasında hata: Hedef 'Yok' bu komutu destekleyemiyor.
Omry Yadan

4
  • .Gdbinit kullanarak (makro yazabileceğiniz ve gdb'den çağrı yapabileceğiniz başlangıç ​​dosyası). Gdb her yüklendiğinde alınacak şekilde .gdbinit'i ana dizininize yerleştirin
  • tüm aktif evreleri listelemek için bilgi dizileri ve geçmek istediğiniz f (#) -> # evre numarası

  • bazen onaltılı veya ikili onaltılık dönüştürmek için gdb kullanın, onun yerine bir hesap makinesi açmak için çok kullanışlı

    • p / d 0x10 -> 0x10 ondalık eşdeğerini verir
    • p / t 0x10 -> 0x10 ikili eşdeğeri
    • p / x 256 -> onaltılık eşdeğer 256

4

Program yürütme kod satırı nerede olduğunu vurgulayan bir ekran içeren bir alt işlem görmek için -tui seçeneği ile gdb başlatmak yerine, Cx o ve Cx a ile bu özelliğin içine ve dışına atlamak. Bu özelliği kullanıyorsanız ve özelliği geçici olarak kullanmamanız durumunda kullanışlıdır, böylece önceki komutu almak için yukarı oku kullanabilirsiniz.


2
focus cmdyukarı / aşağı okların çalışmasını sağlamak için odağı komut penceresine değiştirebilirsiniz . Düğmesini kullanarak geri dönersiniz focus src.
Nathan Fellman

3

Bu yararlı olabilir, yine de geliştirilebileceğinden eminim, hoş geldiniz:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.