[英]Dump core if SIGSEGV (in C)?
當程序接收到SIGSEGV信號時,如何轉儲內核? (運行我的程序的服務器的權限非常有限,因此默認情況下禁用核心轉儲。)
我使用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);
}
除非有硬限制阻止您,否則可以使用setrlimit(RLIMIT_CORE, ...)
來增加軟限制並啟用coredumps-這相當於在shell中運行ulimit -c
。
在linux上,通常可以執行以下操作:
$ ulimit -c unlimited
收到信號后,生成的核心文件將被寫入進程的當前工作目錄中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.