2012-01-22 18 views
9

Bazı C uygulamalarımın hatalarını ayıklamak için GDB kullanıyorum. Şu anda yaptığım şey hedef uygulamayı yüklemek, satır 30'da bir kesme noktası belirlemek ve onu çalıştırmaktır.GDB - Hedef uygulamanın ekran çıktısını ayrı bir pencerede görüntüleme

GDB terminal penceresi aracılığıyla kesme noktası işlemeyi hala kontrol edebiliyorken GDB'nin kendi uygulamamın çıktısını yeni bir terminal penceresinde görüntülemesini istiyorum, ancak uygun bir anahtar bulamıyorum. . GDB'nin programımın çıktısını kendi penceresinde görüntülemesinin bir yolu var mı?

cevap

0

Bildiğim en iyi yol, programın çıktısını bir dosyaya yeniden yönlendirmek ve daha sonra başka bir uçbirimde bulunan dosyayı tail -f yapmaktır. Yönlendirme, GDB documentation'da belgelendiği gibi run > filename ile yapılır.

+0

Cevabınız için çok teşekkürler. Ne yazık ki, yapmak istediğim şey için çalışmıyor, ama çıktıları filtreleyerek ve başka bir uygulamaya yönlendirerek kendi amaçlarım için kirli bir alternatif çözüm bulmayı başardım (Projem Windows üzerinde çalışıyor ve MiniGW paketini kullanıyor). – beta

+0

ncurses ile iyi şanslar :-) – clearlight

12

here'da gösterildiği gibi bunu gerçekleştirmek için set new-console on'u kullanabilirsiniz.

+0

Oh iyi teşekkürler, tam olarak aradığım şey bu. GDB ile tekrar çalışmaya başladığımda kesinlikle cevabınızı aklımda tutacağım! – beta

+0

Bu cevap şimdi hayatımı kurtardı. Bu ayarı neden daha önce bulamadığımı bilmiyorum. Teşekkürler bir grup –

+0

@ Herr_Doktor yardımcı oldu :) gnu tarzı dokümantasyonu kolay bir şekilde bulmak için kendi kendine eğilimi eğiliminde değildir, bu yüzden bunu kaçırmış olabilirsiniz. – greatwolf

6

Bunu yapmanın bir başka yolu da, hedef programınızı gdbserver ile başlatmak (sizin için uygun olduğunu varsayarak) olacaktır. Sonra GDB'yi ayrı bir pencerede gdbserver'a bağlayabilirsiniz. Pencere A'dan

GNU gdbserver documentation

:

gdbserver :12345 myprog [args...] 

pencere B'den:

gdb test 
GNU gdb 6.6 
... 
(gdb) target remote localhost:12345 
Remote debugging using localhost:12345 
0x009867c0 in ??() 
(gdb) b main 
Breakpoint 1 at 0x804834a: file test.c, line 40. 
(gdb) c 
Continuing. 

Breakpoint 1, main (argc=1, argv=0xffff8904) at test.c:40 
40   int i = 1; 
(gdb) 
+0

Harika bir çözüm gibi gözüküyor, çok teşekkür ederim. Daha önce hiç gdbserver ile çalışmamıştım. – beta

+0

Bunun yerine "127.0.0.1:12345" adresine bağlamak isteyebilirsiniz. – ysdx

1

Sadece tty komutunu kullanın. Eğer/dev yönlendirildi programın çıktısını istiyorsanız/puanlar/5 tipi:

burada nasıl GDB tty komutunu kullanmak için kısa bir açıklama yapılmıştır merak insanlar için
tty /dev/pts/5 
+0

Bu 'tty' komutu için yeni bir seçenek mi? Fedora 19 sistemimde 'tty' komutu bu parametreyi kabul etmiyor. – KyleL

+0

@KdawgUD: Emin misin? Komuta benim için çalışıyor. Hata mesajı gösterebilir misin? –

+1

Dokümanlarda [burada] (https://sourceware.org/gdb/onlinedocs/gdb/Input_002fOutput.html) bir örnek var. –

5

...

  • aç yeni konsol penceresi. Buradaki GDB altında çalışan programdan çıktıyı yönlendireceğiz. Bu bizim çıkış penceremiz.
  • Çıkış penceresinde tty komutunu çalıştırın. Bu, alttaki konsol tarafından kullanılan tty'nin adını gösterir. /dev/pts/4

  • $ tty
    Açık başka konsol penceresi ve GDB buradan başlayın. Buna GDB penceresini diyelim.

  • Şimdi, yukarıda elde edilen tty dosya adını kullanarak GDB'deki tty komutunu çalıştırın ve ardından hata ayıklama işlemini başlatın. (gdb) run

(gdb) tty /dev/pts/4

Şimdi çıkış penceresinde ayrı bir program çıkış görmek gerekir.

Not: GDB, komuta yeni bir konsolda Linux üzerinde çalışmıyor! Sadece pencerelerde çalıştırılmak istenmektedir. Linux'ta yukarıda açıklanan tty yöntemini kullanın.orijinal penceresinden ayıklayıcı kontrol Mac üzerinde lldb ile

0

aşağıdaki yeni w terminal penceresinde programı çalıştırır:

$ lldb <prog> 
(lldb) b main # if you want to set a breakpoint 
(lldb) process launch --tty -- <args> 

Bu işlem içinde TTY belirtildiği gibi bir program (terminal penceresi) çalıştıran :

$ tty # (in other window, get tty name) 
/dev/ttys002 

$ lldb 
(lldb) b main # if you want to set a breakpoint 
(lldb) process launch --tty=/dev/ttys002 -- <args> 
İlgili konular