段错误(核心已转储)的本质

核心已转储存 转储了什么内容?转储到了哪里?

linux下转储到了coredump文件?

coredump叫做核心转储,实际上也就是进程运行过程中的一个内存快照,当进程crash的时候,操作系统接收异常指令之后,在进程crash之前,会把进程做一个内存快照,将这些信息保存在一个文件中,这个文件就是coredump文件。
这个文件里包含进程的内存里的地址信息,寄存器信息,堆栈调用信息等。

段错误(核心已转储)是哪个工具的打印信息? 编译器吗?

stm32开发时产生段错误时,会转储吗??

stm32发生段错误会跳转到硬件错误中断。
可以在硬件错误中断中打印一些堆栈信息帮助解决问题

https://blog.csdn.net/XU18829898203/article/details/117014960?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168794444616800182738840%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168794444616800182738840&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-117014960-null-null.142v88insert_down1,239v2insert_chatgpt&utm_term=stm32%E6%AE%B5%E9%94%99%E8%AF%AF&spm=1018.2226.3001.4187

void HardFaultHandle(uint32_t stack[])
{
	static char msg[80];
	sprintf(msg, "R0 = 0x%08x\r\n", stack[r0]); printf(msg);
	sprintf(msg, "R1 = 0x%08x\r\n", stack[r1]); printf(msg);
	sprintf(msg, "R2 = 0x%08x\r\n", stack[r2]); printf(msg);
	sprintf(msg, "R3 = 0x%08x\r\n", stack[r3]); printf(msg);
	sprintf(msg, "R12 = 0x%08x\r\n", stack[r12]); printf(msg);
	sprintf(msg, "LR = 0x%08x\r\n", stack[lr]); printf(msg);
	sprintf(msg, "PC = 0x%08x\r\n", stack[pc]); printf(msg);
	sprintf(msg, "PSR = 0x%08x\r\n", stack[psr]); printf(msg);
	sprintf(msg, "The task pri id = 0x%0.8x\n", OSPrioCur); printf(msg);
	Hard_Fault_Handler(stack);
	printf("My GOD Why die\r\n");
	BSP_CPU_Reset();	// 复位CPU
	while (1)
	{
		BSP_CPU_Reset();	// 复位CPU
	}
}

https://blog.csdn.net/qq_29350001/article/details/87186130

core,核心(线圈),没有半导体之前,使用线圈内存,指代内存。

可执行文件是分段存储的,加载进内存也是分段的,如代码段、数据段、堆、栈等,段错误的原因往往是碰到了不该碰到的内存位置(如系统保留段、代码段不能被修改,使用空指针等)。

核心已转储就是说进程结束之前,内存已被储存,可以用于程序员翻看程序的“临终遗言”来定位问题。往往需要使用gdb工具查看核心转储文件,且需要采用一些设置保障核心文件能够被储存,方法如下:

[Linux] 什么是 段错误(吐核)?_giturtle’s blog-CSDN博客_段错误(吐核)

已经设置了ulimit,为什么还是没有core文件 - 菜鸡徐思 - 博客园

原文链接:https://blog.csdn.net/weixin_41877956/article/details/122933610

段错误(核心已转储)的原因

你可能感兴趣的:(C语言,STM32,单片机,keil)