2016-03-29 12 views
1

Ekran sanal terminalinde gdb (GNU hata ayıklayıcısını) çalıştırmak ve bitişik Ekran görünümünde çıkışı gerçek zamanlı olarak göstermek istiyorum.Linux'ta stdout nasıl bölülür (Başka bir görünümde grep paralel çalıştırın)

Bu düzenlemeyi nasıl uygularım? Normal boru sadece çıkışı yönlendirir. Ekran görünümünün (^ A + c) IO için var olan bir işleme nasıl bağlanacağını da merak ediyorum.

DÜZENLEME:

aşağıdaki çözüm geldi. mkfifo borusu ile bir adlandırılmış boru oluşturuldu ve gdb programı çalıştırıldı |pty1. Bu, çıkışı bir boruya kopyalar. pty2 'da daha az boru döşemedim | İlgili satırları yazdırmak için grep.

Böyle bir önemsiz görev için daha basit bir yol olsa da eminim.

EDIT2:

yukarıda bahsedilen yöntem biraz arabası gibi. FIFO'dan gerçekten bir şey okumadıkça Gdb, konsoluna hiçbir şey yazdırmıyor. Neden? Ayrıca, bu yöntemi, kendi programımla, sadece HelloWorld'ü stdout'a basan kendi programımla denediğimde, hiçbir görünümde hiçbir şey yazdırılmaz.

EDIT3: Ben Tee blokları kimse aslında borusundan okur eğer kasıtlı olduğunu anladım

. Senkronizasyon meselesi. Yine de merak ediyorum, orijinal program klavyeden girişi bile okuyabiliyor nasıl artık Tee pencereleri kontrol ediyor. Yoksa öyle ki, terminal girişi, orijinal programın stdin'ine ve Tee'nin stdout'una çıktı mı?

+1

Engellemeyi önlemek için boruya ait bir dosya kullanın. Ardından, dosyayı izlemek için 'tailf' komutunu kullanın (veya birden çok dosyayı izlemek için tail -f). –

+0

Bu iyi bir çözüm gibi görünüyor. Çekirdek herhangi bir tıkanma önleyici boru mekanizması sağlar, yani. diske yazmadan süreçler arasında veri geçişi? Ben de ilginç bir sorunla karşılaştım: eğer bir şey yazdıysam ve bundan sonra uyursam, uykunun bile yapılmasına rağmen boruya hiçbir şey yazılmaz. Neden böyle? –

+0

Girdi ve çıktı genellikle satır tamponludur, 'fflush()' işlevini kullanın veya bir satır sonu yazın. Yani, neden geçici bir dosya çalışmıyor? Sadece hata ayıklama günlüğü için olan izlenim altındaydım. Farklı bir şeye ihtiyacınız varsa, bunun hakkında daha kesin olmanız gerekir .. –

cevap

0

Programınızı gdb'dan başlatmanız gerekmez. Sadece bir ekran bölmesinde başlatın ve pid'u (top, pgrep, ps kullanın) belirleyin.

gdb <path_to_program> <pid> 

Eğer gdb kontrol etmek için bir terminali ve hata ayıklaması programı kullanmak için bir terminali Bu şekilde, hem kendi giriş ve çıkışları vardır: Diğer bölmede

Eğer gdb oturumu başlatmak.

Tek koşul programın hata ayıklayıcısını sürece eklemeniz için yeterince uzun süre çalışmasıdır. Bunu yapmanın kolay bir yolu, başlangıçta girişi beklemesini sağlamaktır. Ayrıca, pid numarasını yazdırabilirsiniz.

+0

Sanırım niyetimi yanlış anlıyorsunuz. Program diğer görünümde hata ayıklanan program değil, konsol metin formunu gdb alan ve filtreleme/biçimlendirme programıdır. Bu durumda grep, sadece ilgilendiğim satırları yazdırıyorum. –

İlgili konular