Linux 시스템에서 코어 덤프 파일을 찾을 수 없습니다.

Linux 시스템에서 코어 덤프 파일을 찾을 수 없습니다.

1

코어 덤프 파일을 찾으려고 할 때 비슷한 주제를 살펴봤지만 어떤 솔루션도 나에게 적합한 것 같지 않았습니다. 누군가 디버깅을 도와줄 수 있나요? 내 응용 프로그램은 코어 덤프로 인해 실패했음을 나타내는 출력을 로그 끝에 생성하지만 파일은 어디에도 생성되지 않으며 정보가 로그 파일에 유지되지 않습니다.

리눅스 시스템:

NAME="Red Hat Enterprise Linux Server" VERSION="7.8 (Maipo)" ID="rhel" ID_LIKE="fedora" 앞에서 언급했듯이 주어진 링크에서 여러 가지 방법을 시도했습니다.

한계값

ulimit -c
unlimited

cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E

확인해 보니 ap 폴더가 존재하지 않는 것으로 나타났습니다.

또한 /tmp로 시작하는 문자열로 /proc/sys/kernel/core_pattern을 수정해 보았습니다.

echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern: Read-only file system

현재 해당 액세스 권한이 없기 때문에 루트로 실행하면 작동합니까?

애플리케이션을 실행하는 디렉터리에도 코어 덤프 파일이 존재하지 않습니다.

또한 다음 사항에 대해 전체 시스템을 살펴보았습니다.

find / -name 'core*'


find / -name '*apport*'

또한 다른 폴더도 확인했습니다.

ls /var/cache/abrt
ls: cannot access /var/cache/abrt: No such file or directory
ls /var/crash
ls: cannot access /var/crash: No such file or directory
ls /var/spool/abrt
ls: cannot access /var/spool/abrt: No such file or directory
cat /var/log/apport.log
cat: /var/log/apport.log: No such file or directory

결과가 없다:

ls /var/lib/systemd/coredump/

다음 솔루션의 경우:이 문제를 해결하려면 apport가 패키지가 아닌 프로그램에 대한 코어 덤프 파일도 작성하는지 확인해야 합니다. 이렇게 하려면 다음 내용으로 ~/.config/apport/settings라는 파일을 생성하십시오. [main] unpackaged=true

cd ~/.config/apport/
cd: /opt/front/arena/.config/apport/: No such file or directory

해결 방법: RHEL에서 바이너리에 대한 코어 덤프가 누락되어 있고 를 사용할 때 다음을 포함 abrt해야 합니다./etc/abrt/abrt-action-save-package-data.confProcessUnpackaged = yes

cd /etc/abrt
cd: /etc/abrt: No such file or directory

아무래도 선택의 여지가 없는 것 같아요. 감사해요

답변1

$ ulimit -c
unlimited

이것은 좋다. 권한 문제가 없는 한 코어 파일은 크기 제한 없이 생성됩니다. 이 명령이 나타나지 않으면 를 unlimited사용하여 값을 변경할 수 있습니다 ulimit -c unlimited.

$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E

apport이 설정은 코어 파일을 프로그램 (설치되지 않음) 으로 리디렉션하므로 디스크에 코어 파일을 원하는 경우에는 원하는 것이 아닙니다 .

이전과 마찬가지로 이 설정을 수동으로 변경할 수 있지만 관리자 권한이 있어야 합니다. 루트로 로그인하고 다음 명령을 사용하여 core_pattern 파일을 변경합니다.

echo /tmp/cores/core.%e.%p.%h.%t > /proc/sys/kernel/core_pattern

...또는 다음을 사용하십시오 sudo.

echo /tmp/core.%e.%p.%h.%t | sudo dd of=/proc/sys/kernel/core_pattern

가장 좋은 방법은 다음과 같습니다.sysctl:

sudo sysctl -w kernel.core_pattern=/tmp/cores/core.%e.%p.%h.%t

일반적 /etc/sysctl.conf으로 적절하게 편집하여 이 변경 사항을 영구적으로 적용할 수 있습니다.

Read-only file system참고: 파일 내용을 변경하려고 하면 다음과 같은 문제가 발생하는 것으로 나타났습니다. proc FS가 읽기 전용으로 마운트된 것으로 보입니다. 다음을 변경하기 전에 읽기-쓰기 권한으로 다시 마운트해야 합니다 /proc.

sudo mount -o remount,rw /proc

그게 다야. 이제 요구 사항에 따라 핵심 파일이 /tmp에 생성됩니다. Bash를 사용하여 다음과 같이 테스트할 수 있습니다.

$ sleep 3 & kill -SEGV $!
[1] 4604
[1]+  Segmentation fault      sleep 3

$ ls /tmp/core*

코어 파일에 대한 추가 정보man 5 core.

관련 정보