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.conf
ProcessUnpackaged = 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
.