Linux에서 프로그램 충돌 문제를 어떻게 추적 할 수 있습니까?


12

Windows에서 응용 프로그램이 충돌하면 관리 도구에서 이벤트 뷰어를 확인하여 충돌 한 부분을 확인할 수 있습니다. 때로는 유용한 정보를 다른 사람들에게 제공하지는 않지만 시작입니다.
리눅스에서 응용 프로그램이 충돌하면 어떻게 된 일을 추적하기 시작합니까?
예를 들어 중앙 통나무 또는 이와 유사한 것이 있습니까?


2
이런 종류의 문제를 디버깅하는 표준 방법은 터미널에서 문제가있는 응용 프로그램을 수동으로 시작하는 것입니다. 이렇게하면 오류 메시지가 인쇄되는 것을 볼 수 있습니다.
terdon

2
Linux의 64 비트 버전은 충돌 프로세스 (신호로 인해 사망 한 프로세스)에 대한 간단한 설명을로 기록합니다 /var/log/syslog. Linux는 데몬에게 프로세스 충돌을 알리는 방법을 제공합니다. 우분투의 apport 및 Red Hat의 ABRT 사용이 중앙 집중식 로깅 및 보고서 생성 기능을 제공합니다. 일반적으로 코어 덤프가 저장되어 충돌 한 프로그램에서 디버거를 호출 할 수 있습니다.
Mark Plotnick

나는이 질문을 찬성했지만 OP는 답을 수락하거나 게시함으로써 커뮤니티를 돕고 싶지 않은 것 같습니다. 검색 결과 및 도움말 미래 수색자의 정상에 상승
Mawg는 분석 재개 모니카 말한다

답변:


13

예를 들어 중앙 통나무 또는 이와 유사한 것이 있습니까?

시스템 로그의 일반적인 위치는 /var/log/입니다. 각 로그에 넣는 것은 syslog 구성에 따라 다르지만 일반적으로 로그인을 제외한 모든 것은로 이동합니다 /var/log/syslog.

이것은 문제가 발생했을 때 개별 응용 프로그램에 실마리가 남아 있다고 보장하지 않습니다. 그러나 그것들 또는 쉘은 표준 출력 / 표준 오류 스트림에 무언가를 뱉을 것입니다. 터미널에서 전경에서 번거로운 응용 프로그램을 실행하면 해당 내용을 볼 수 있습니다.


/var/log어떤 로그 파일 에서 찾아야 합니까? 어떤 규칙이 있습니까?
Jim

2
충돌이 발생하면 / var / log 아래에서 가장 최근에 변경된 파일을 확인하십시오. 을 (를) 사용 ls -lart하여 목록의 마지막 파일이 가장 최근에 변경되었습니다.
Devon_C_Miller

규칙이있다 S - 리눅스가 훨씬 더 이질적인 창보다. Syslog 는 시스템 로거를 참조하지만 보편적 인 구현은 없으며 변형을 다른 방식으로 구성 할 수 있습니다. 일반적인 논리는 응용 프로그램에서 메시지를 syslog로 보낸 다음 이러한 메시지를 다른 파일로 정렬하는 것입니다. 언급했듯이 일반적으로 모든 것이로 끝나지 /var/log/syslog만 다른 배포판은 다르게 작동합니다. 어떤 syslog를 사용하고 있는지 알면 구성을 검사하여이를 확인할 수 있습니다.
goldilocks

6

우분투에서 segfaults는에서 작성됩니다 /var/log/kern.log. segfaults하는 프로그램을 만들어서 테스트했습니다.

void main() {
    int *a=0;
    *a=0;
}

그것이 segfaulted 후이 라인이 있었다 /var/log/kern.log:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]

1

우분투에서는 .desktop 런처 파일에서 응용 프로그램을 시작하는 경우 .desktop 파일에 옵션 Terminal=true을 추가 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.