2011-01-06 5 views
11

C 프로그램을 디버깅하는 중입니다. 나는 모든 내부 디버깅 도구 (printf의 전체 묶음)를 사용할 수있게했으며, proc_open()을 사용하고 stdout과 stderr를 모두 가져 와서 한 파일에서 시간 좌표를 지정하는 작은 PHP 스크립트를 작성했습니다. 여기 glibc backtrace - 출력을 파일로 리디렉션 할 수 없습니다.

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

이 이해하지 않는 일이 : 순간

는 바이너리로 시작, glibc에 의해 잡힌 것과 realloc() 오류로 죽어되고, glibc는 백 트레이스가 인쇄됩니다 I PHP 스크립트가 바이너리의 프로세스에서 stdout과 stderr를 모두 잡아서 올바른 파일에 쓰는 것을 확인했지만,이 백 트레이스는 여전히 콘솔에 출력됩니다. 이게 어디서 오는거야? stdout 및 stderr 이외의 마법 출력 채널이 있습니까?

이 백 트레이스를 파일로 캡처하는 방법이나 stderr로 보내는 방법에 대한 아이디어는 있습니까?

감사합니다, 제이슨

답변

11

죄송합니다 ... 제가 인터넷 검색의 약 반 시간 후에 질문을하지만, 좀 더 조사 후, 나는 페도라 메일 링리스트 게시물에 ... 해결책을 발견 (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html) ... 누룩에서이 문제를 구축 시스템을 다루는 오류 보고서는 몇 가지 이유는/dev/청각 장애로 바로 이동 분명히 기본적으로

export LIBC_FATAL_STDERR_=1 

...

+0

오 잘. 모든 곳에서 너무 많은 파손. – Griwes

0

메일 링리스트 그 또한 제이슨 참조 ~을 제안하다 오메 더 강력 솔루션, 다음과 같이

이럴 코지 (그리고 그 문제에 대한 모의가)가 모든 리디렉션 경우에도이 내부 출력이 어쨌든 기록 포로 PTY를 구축 실행되어야한다. 어떤 패키지가 시도하려고하는 미친 말도 알지 못합니다. (롤랜드 맥그래스, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)

이어 포스트이를 위해 pty 파이썬 패키지를 사용하여 제시한다.

관련 문제