내 프로그램에서 SIGSEGV 신호를받을 때 어떻게 코어를 덤프 할 수 있습니까? (내 프로그램을 실행하는 서버에는 사용 권한이 매우 제한되어 있으므로 기본적으로 코어 덤프가 사용되지 않습니다.)SIGSEGV 인 경우 코어 덤프 (C)?
gcore를 사용하여 다음을 작성했지만 대신 C 함수를 사용하고 싶습니다. 어떻게 든 코어를 잡고 어딘가에 폴더에 쓸 수 있습니까?
void segfaulthandler(int parameter)
{
char gcore[50];
sprintf(gcore, "gcore -s -c \"core\" %u", getpid());
system(gcore);
exit(1);
}
int main(void)
{
signal(SIGSEGV, segfaulthandler);
}
코어 파일은'/ proc/sys/kernel/core_pattern'의 값을 사용하여 현재 작업 디렉토리를 기반으로 생성됩니다 - 기본값은 단순히 "core" – Erik
또한/proc/sys/kernel/core_uses_pid '를 1로 설정할 수 있습니다.이 경우 .pid가 코어 파일 이름에 추가됩니다 (패턴에 % p가 포함되어 있지 않은 경우) – Erik