2011-01-06 26 views
11

Bir C programında hata ayıklama işlemi yapıyorum (yazmamıştım). Dahili hata ayıklama araçlarının hepsine (bir sürü printf'in) sahip oldum ve proc_open() işlevini kullanan küçük bir PHP betiği yazdım ve hem stdout hem stderr'i yakaladım ve bunları tek bir dosyada zaman koordinatıyla yapıyorum. İşte glibc backtrace - çıktıyı dosyaya yönlendiremiyor

*** glibc detected *** /sbin/rsyslogd: realloc(): invalid next size: 0x00002ace626ac910 *** 

Anlamadığım şey: Şu anda

, ikili başlayarak glibc tarafından yakalandı bir realloc() hata ile ölüyor ve bir glibc backtrace basılır ben PHP betiğinin hem stdout'u hem de stderr'i ikili dosyadan yakaladığını ve bunları doğru dosyalara yazdığını doğruladı, ancak bu backtrace hala konsola basıldı. Bu nereden geliyor? Stdout ve stderr dışındaki bazı büyülü çıkış kanalları var mı?

Bu backtrace'i bir dosyaya kaydetme veya stderr ile gönderme hakkında nasıl bir fikrim var?

sayesinde Jason

cevap

11

Maalesef ... Ben googling yaklaşık yarım saat sonra soru soruldu, ama biraz daha soruşturma sonrasında, bir Fedora posta listesi post ... bir çözüm buldu (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html) ... Koji bu soruna inşa sistem ile uğraşan hata raporları nedense/dev/tty hakkı gitmek Görünüşe varsayılan olarak

export LIBC_FATAL_STDERR_=1 

...

+0

Oh iyi. Her yerde çok fazla kırılma var. – Griwes

0

posta listesi olması da Jason referanslar önerir B azı daha ağır çözümleri aşağıdaki gibi:

IMHO koji (ve bu konuda sahte) onlar her şeyi yönlendirir bile içeride kimin çıkışı yine kaydeder esir pty kurar çalışıyor olması gerektiğidir. Bir paketin ne denli saçmalamayacağını asla bilemezsin. (Roland McGrath, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)

takiben mesajlar Bunu gerçekleştirmek için pty piton paketini kullanmanızı öneririz.

İlgili konular