내 프로그램에서 세그먼트 결함이 지속적으로 발생하지만 코어 덤프 파일이 생성되지 않습니다. ulimit은 무제한의 가치를 보여 주며, ulimit -c는 무제한 적으로 확실합니다. 어떤 아이디어?세그먼트 오류, 코어 덤프 없음
답변
가 여러 가지 이유로
- 디렉토리
- 프로그램이
보면 다른 곳의 핵심 작업 디렉토리를 변경없이 쓰기 액세스 할 수도 - 디스크는
- ulimit를 가득 수 한 쉘에서 설정되고 프로그램이 다른 쉘 또는 환경에서 시작됩니다.
+ 프로그램은 데몬이지만, OP는 현재 쉘 세션에 대해 ulimit 설정을 변경합니다. – Slava
@Slava 감사합니다. –
테스트에있는 루트에 반대하지 않습니다를 제공, 쉘 세션 문제를 해결 효율적으로 활용하려면 다음
#ifdef DEBUG
// Enable core dumps
struct rlimit corelim;
corelim.rlim_cur = -1;
corelim.rlim_max = -1;
if (setrlimit (RLIMIT_CORE, &corelim) != 0)
{
log_error ("Couldn't set core limit");
}
#endif
세그먼트 오류가 메모리에 잘못된 주소를 액세스, 특히 것으로 발생합니다. 리소스를 부적절하게 초기화하는 것은 매우 가능합니다. 예를 들어, Valgrind를 디버깅에 사용할 수 있습니다.
어떻게 코어 덤프가 생성되지 않는 문제를 해결합니까? – us2012
메모리 할당 문제는 구문 오류가 아닙니다. – user1929959
은 프로그램 루트로 (또는 루트 기능을) 확인 실행하는 경우 :
cat /proc/sys/fs/suid_dumpable
또는 프로그램이 데몬 확인하는 경우 :
getsebool allow_daemons_dump_core
Mayby 먼저 우리에게 몇 가지 코드를 보여? – Blood
null 포인터 또는 배열 외부에 액세스하는 가능성이 가장 높습니다. – QuentinUK
디버거에서 프로그램을 실행하면 오류가 발생할 때 중단됩니다. – unwind