Core dump

在c语言编程时,core文件可以帮助我们查找内存原因引起的程序故障。
我们先看看如下英文并翻译:
[quote]In computing, a core dump consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has terminated abnormally (crashed).[1] In practice, other key pieces of program state are usually dumped at the same time, including the processor registers, which may include the program counter and stack pointer, memory management information, and other processor and operating system flags and information. The name comes from the [b]once-standard core memory technology[/b]. Core dumps are often used to diagnose or debug errors in computer programs.

On many operating systems, a fatal error in a program automatically triggers a core dump, and by extension the phrase "to dump core" has come to mean, in many cases, any fatal error, regardless of whether a record of the program memory results.

The term "core dump" has become jargon to indicate any deposition of a large amount of unedited data for further examination.

翻译:在(程序的)运行中,一个“内核转储”包含了计算机程序的内存运行在一个明确的时间的状态记录,通常在程序非正常中止的时候(坠毁)。实际上,程序状态的其它关键件经常同时产生转储,包括处理器的寄存器,寄存器还可能包括程序计数器(PC)和堆栈指针(SP),内存管理信息,和其它处理器和操作系统标志位和信息。它的名字来自[b]一旦标准的核心存储技术[/b]。内核转存经常用于诊断或者调试计算机程序当中的错误。
在很多操作系统中,一个程序中的一个致命错误自动地出发一个内核转储,并且扩展地词组"to dump core"已经意味着在很多情况下,任意致命错误,无论是否是一个程序内存结果记录。
术语"core dump"已经成为用来指示任意大量未编辑的数据的沉积以用于将来检查的行业术语。
——翻译得非常不好,希望专业人士给予指正!谢谢!
[/quote]

转载一段较好的描述:[url]http://blog.sina.com.cn/s/blog_621ae12b0100ekgz.html[/url]
core dump,翻译过来讲,就是核心转储。大致上就是指,如果由于应用错误,如浮点异常、指令异常等,操作系统将会转入内核的异常处理,向对应的进程发送特定的信号(SIGNAL),如果进程中没有对这些信号进行处理,就会转入默认的处理,core dump就是其中的一种。如果进程core dump,系统将会终止该进程,同时系统会产生core文件,以供调试使用。这个core文件其实就是内存的映像,即进程执行的时候内存的内容,也就是所谓的core dump。平常大家说某某进程core dump了,其实主要的意思就是说:某某进程因为错误而被系统自动终止了。

我当前使用的linux是Ubuntu9.04,gdb是6.8,gcc是4.3.3:
[quote]canlynet@canlynet-desktop:~$ uname -a
Linux canlynet-desktop 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux

canlynet@canlynet-desktop:~$ gdb --version
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".

canlynet@canlynet-desktop:~$ gcc --version
gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3
Copyright © 2008 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权gpl.2
[/quote]

查看core file size的默认值(未修改过)man ulimit: ulimit - get and set user limits,关于ulimit请参考:[url]http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/[/url]

[quote]
canlynet@canlynet-desktop:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[/quote]

其中core file size表示生成core文件最大的大小,注意单位是blocks,-c参数用于设置。

我们写如下代码实验:
#include <stdio.h>

int main(int argc, char *argv[])
{
int *p;

*p = 21;
printf("*p = %d", *p);

return 0;
}


[quote]canlynet@canlynet-desktop:~$ gcc -o test_core test_core.c -g
canlynet@canlynet-desktop:~$ ./test_core
段错误
canlynet@canlynet-desktop:~$ ls core*
ls: 无法访问 core*: 没有该文件或目录
[/quote]

我们看到,core file size为0的时候是不会生成core文件的。
我们设置一下:
[quote]
canlynet@canlynet-desktop:~$ ulimit -c 1024
canlynet@canlynet-desktop:~$ ulimit -a
core file size (blocks, -c) 1024
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
canlynet@canlynet-desktop:~$ ./test_core
段错误 (core dumped)
canlynet@canlynet-desktop:~$ ls -l core*
-rw------- 1 canlynet canlynet 147456 2010-03-12 22:14 core

[/quote]

设置过core file size后,运行出错会产生core dumped。我们看到一个core文件。
我们用GDB调试工具来查看这个core。
[quote]
canlynet@canlynet-desktop:~$ gdb --core=core
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
(no debugging symbols found)
Core was generated by `./test_core'.
Program terminated with signal 11, Segmentation fault.
[New process 8970]
#0 0x080483d8 in ?? ()
(gdb)
[/quote]
[New process 8970]中的8970是本次运行该程序产生进程的PID。

我们在gdb中运行bt(backtrace)命令:
[quote]
(gdb) bt
#0 0x080483d8 in ?? ()
#1 0xb7e29775 in ?? ()
#2 0x08048331 in ?? ()

[/quote]

此时看不到出错具体在代码的哪一行,我们再将文件信息传递给gdb:

[quote]
(gdb) file ./test_core
Reading symbols from /home/canlynet/test_core...done.
(gdb) bt
#0 0x080483d8 in main () at test_core.c:7
(gdb) l
1 #include <stdio.h>
2
3 int main(int argc, char *argv[])
4 {
5 int *p;
6
7 *p = 21;
8 printf("*p = %d", *p);
9
10 return 0;
(gdb)
[/quote]

这次我们就能查找出出错位置具体在main函数中第7行代码处了。

——备注:程序错误是c里野指针的典型解释。

——另外,对于段错误,我们不分析core文件也可以查错误产生的位置(gdb中run就可以了):
[quote]
(gdb) r
Starting program: /home/canlynet/test_core

Program received signal SIGSEGV, Segmentation fault.
0x080483d8 in main () at test_core.c:7
7 *p = 21;
(gdb) l
2
3 int main(int argc, char *argv[])
4 {
5 int *p;
6
7 *p = 21;
8 printf("*p = %d", *p);
9
10 return 0;
11 }
(gdb)

[/quote]
标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员和数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度和风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现和模型架构解析,还深入探讨了模型优化和实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能和实现细节,并尝试在自己的项目中应用这些技术和方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性和透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值