코어 파일은 덤프되었지만 코어 파일은 덤프되었습니다.
C 프로그램을 실행하는 동안 "(core dumped)"라고 표시되지만 현재 경로 아래에 파일이 없습니다.
는 이 설정을 을 했습니다.ulimit:
ulimit -c unlimited
ulimit -a
"core dumpedfile이 안 file이 안 요?
내심 핵일 ?? ?? ???
최근 Ubuntu(내 경우 12.04)에서는 "Segmentation fault(core dumped)"가 인쇄될 수 있지만 로컬 컴파일된 프로그램의 경우 등 예상할 수 있는 핵심 파일이 생성되지 않았습니다.
사이즈의 ( 「 「 ulimit 」0 이 있지 않은 ulimit -c unlimited) -- Ubuntu 기본 설정입니다.보통은 (core dumped)를 억제하여 실수를 저지르지만 Ubuntu에서는 코어파일이 Apport(Ubuntu의 크래시 리포트 시스템)로 파이핑됩니다./proc/sys/kernel/core_pattern이로 인해 잘못된 메시지가 표시되는 것 같습니다.
가 문제의 (Apport의 크래시는 Apport에서 할 수 있습니다)./var/log/apport.logcwd에 넣는 「cwd」로/usr/share/apport/apport여기에는 ulimit를 존중하는 것도 포함되는데, 이 경우 ulimit은 아무 것도 하지 않습니다.세그먼트 장애(코어 덤프)라는 메시지가 나타납니다.
결국 ulimit를 설정하는 것을 잊은 PEBKAC이지만, 그 잘못된 메시지는 내가 잠시 미쳐가고 있다고 생각하게 했고, 내 코어파일을 먹는 것이 무엇인지 궁금하게 만들었다.
(코어(5) 매뉴얼페이지 --)man 5 core 코어 되지 않는 입니다.)------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/usr/src/linux/Documentation/sysctl/커널을 읽습니다.txt를 클릭합니다.
core_pattern은 코어 덤프 파일 패턴 이름을 지정하기 위해 사용됩니다.
- 패턴의 첫 번째 문자가 '|'일 경우 커널은 패턴의 나머지 부분을 실행하는 명령어로 처리합니다.코어 덤프는 파일 대신 해당 프로그램의 표준 입력에 기록됩니다.
것이 , 코어 를 「」에 .abrt(의미:자동 버그 리포트 툴(「중단」프로그램이 아닌).Automated Bug Reporting Tool이 필요한 만큼 문서화되어 있지 않을 수 있습니다.
어느 경우든, 즉답은, 코어 파일을 다음의 Web 사이트에서 찾을 수 있는 것입니다./var/cache/abrt,어디에abrt는 호출된 후에 저장합니다.마찬가지로 Apport를 사용하는 다른 시스템도 코어를 분산시킬 수 있습니다./var/crash기타 등등.
Ubuntu 16.04 LTS에서 코어 덤프를 취득하는 순서 작성:
@jtn이 답변에서 언급했듯이 Ubuntu는 크래시 표시를 apport에 위임합니다.이것에 의해, 프로그램은 인스톨 끝난 패키지가 아니기 때문에, 덤프 기입을 거부합니다.

이 문제를 해결하려면 패키지가 아닌 프로그램의 코어 덤프 파일도 Apport에 기입해야 합니다.이를 수행하려면 다음 내용으로 ~/.config/apport/settings라는 파일을 만듭니다.
[main] unpackaged=true- 프로그램을 다시 크래시하고 크래시 파일이 *.1000.crash와 같은 이름의 /var/crash 폴더 내에 생성됩니다.이러한 파일은 gdb에서 직접 읽을 수 없습니다.

[옵션] gdb로 덤프를 읽기 쉽게 만들려면 다음 명령을 수행합니다.
apport-unpack <location_of_report> <target_directory>
참조:Core_dump – 오라클 VM Virtual Box
systemd의 론칭과 함께 다른 시나리오도 있습니다.기본적으로는 systemd는 코어 덤프를 저널에 저장하여systemd-coredumpctl명령어를 입력합니다.core_pattern-file에 정의되어 있습니다.
$ cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e
저장된 코어 덤프를 확인하는 가장 쉬운 방법은coredumpctl list(코어 덤프는 자동으로 삭제되었을 수 있습니다).이 동작은 단순한 "해크"로 비활성화할 수 있습니다.
$ ln -s /dev/null /etc/sysctl.d/50-coredump.conf
$ sysctl -w kernel.core_pattern=core # or just reboot
항상 그렇듯이 코어 덤프의 크기는 덤프되는 코어의 크기보다 크거나 같아야 합니다(예:ulimit -c unlimited.
저의 경우 ulimit 명령어가 현재 단말기에만 영향을 주기 때문입니다.
설정했을 경우ulimit -c unlimited첫 번째 터미널에서.그런 다음 프로그램을 실행하기 위해 새 단말기를 시작합니다.코어 덤프 시 코어 파일은 생성되지 않습니다.
프로그램을 실행하는 단말기의 코어 크기를 확인해야 합니다.
다음의 순서는, ubuntu 20.04 및 ubuntu 21.04 로 동작합니다.
- 적절한 서비스를 중지하다
sudo service apport stop
- 프로그램을 실행할 수 있는 단말기의 코어 크기를 설정합니다.
ulimit -c unlimited
Ubuntu 18.04에서는 코어 파일을 얻는 가장 쉬운 방법은 다음 명령을 입력하여 Apport 서비스를 중지하는 것입니다.
sudo service apport stop
그런 다음 응용 프로그램을 다시 실행하면 현재 디렉터리에 덤프 파일이 표시됩니다.
fedora25의 경우 코어 파일을 다음 사이트에서 찾을 수 있습니다.
/var/spool/abrt/ccpp-2017-02-16-16:36:51-2974/coredump
어디에ccpp-2017-02-16-16:36:51-2974" is pattern "%s %c %p %u %g %t %P %/sys/sys/sys/core_pattern'에 따라
다음 두 가지 가능성을 생각할 수 있습니다.
다른 사람들이 이미 지적했듯이, 그 프로그램은
chdir()프로그램을 실행하고 있는 사용자가 디렉토리에 쓸 수 있습니까?chdir()'ed to? 그렇지 않으면 코어 덤프를 생성할 수 없습니다.어떤 이상한 이유로 코어 덤프의 이름이
core.*확인하실 수 있습니다./proc/sys/kernel/core_pattern그럴 수 있어요.또한 사용자가 지정한 find 명령어는 일반적인 코어 덤프를 찾을 수 없습니다.를 사용해 주세요.find / -name "*core.*"코어 덤프의 일반적인 이름은 다음과 같습니다.core.$PID
WSL에서의 나의 노력은 성공하지 못했다.
WSL(Windows Subsystem for Linux)에서 실행 중인 사용자의 경우 코어 덤프 파일이 누락되는 문제가 현재 해결되지 않은 것으로 보입니다.
코멘트에 의하면
이것은 우리가 알고 있는 알려진 문제이며, 우리가 조사하고 있는 것입니다.
ulimit -c unlimited코어 파일이 "core dumped" 후에 현재 디렉토리에 올바르게 표시되도록 했습니다.
Ubuntu 20.04 시스템의 코어 파일을 찾았습니다.
/var/lib/apport/coredump
에서 바이너리용 코어 덤프를 찾을 수 없는 경우RHEL및 사용 시abrt, 반드시 다음을 확인합니다./etc/abrt/abrt-action-save-package-data.conf
포함하다
ProcessUnpackaged = yes
이것에 의해, 인스톨 끝난 패키지의 일부가 아닌 바이너리의 크래시 리포트(코어 덤프 포함)를 작성할 수 있습니다.
Linux Mint 19 (Ubuntu 18 베이스)를 사용하고 있습니다.나는 갖고 싶었다.coredump파일이 현재 폴더에 있습니다.두 가지 일을 해야 했어요
- 바꾸다
/proc/sys/kernel/core_pattern(기준)# echo "core.%p.%s.%c.%d.%P > /proc/sys/kernel/core_pattern또는 에 의해# sysctl -w kernel.core_pattern=core.%p.%s.%c.%d.%P) - 코어 파일 크기 제한 증가:
$ ulimit -c unlimited
그것은 이미 답변에 기재되어 있습니다만, 간결하게 정리하기 위해서 썼습니다.흥미롭게도 제한을 변경하기 위해 루트 권한이 필요하지 않았습니다(https://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user에 따르면 루트가 아닌 루트는 제한을 낮출 수 있기 때문에 예상하지 못했던 것입니다). 이에 대한 코멘트는 환영합니다.
Fedora 를 사용하는 경우는, 같은 바이너리 파일의 디렉토리에 코어 덤프 파일을 생성하려면 , 다음의 순서에 따릅니다.
echo "core.%e.%p" > /proc/sys/kernel/core_pattern
그리고.
ulimit -c unlimited
언급URL : https://stackoverflow.com/questions/2065912/core-dumped-but-core-file-is-not-in-the-current-directory
'programing' 카테고리의 다른 글
| 인컴포넌트 내비게이션가드 콜백이 작동하지 않음: Nuxt JS 및 "beforeRouteEnter" (0) | 2022.07.07 |
|---|---|
| v-bind 개체를 사용하여 하위 구성 요소에서 소품을 가져오는 방법 (0) | 2022.07.07 |
| 긴 vs 정수, 긴 vs int, 무엇을 언제 사용할 것인가? (0) | 2022.07.07 |
| C: POSIX 스레드를 사용하여 재귀 뮤텍스를 선언하려면 어떻게 해야 합니까? (0) | 2022.07.07 |
| VueJ를 사용한 동적 입력 필드 추가 (0) | 2022.07.07 |