win8系统中dump日志文件怎么看

win8系统中dump日志文件怎么看,第1张

系统错误内存转储文件:在默认的设置下,如果系统发生了严重的错误,会转储很多内存中的数据,以便管理人员根据这些数据排除错误。不过这功能对于我们一般用户确实没有什么用,反而浪费了宝贵的硬盘空间。因此每次安装好系统后的第一件事就是禁止系统转储。 在系统属性的高级选项卡下,点击启动和故障恢复的设置按钮,打开一个新的窗口,在系统失败这一个配置项下,取消对将事件写入系统日志、发送管理警报、自动重新启动的选择,并在写入调试信息的下拉菜单下选择“无”。经过这样的设置,就可以避免系统做大量的无用功。 而在写入调试信息的下拉菜单下,我们可以看见四个不同的选项,它们分别会占用不同数量的硬盘空间来保存数据: 无,这将在发生错误的时候不写入任何信息,这个选项不会在系统崩溃时写入任何数据,不会占用硬盘空间。 小内存转储(64K),这个选项将在系统崩溃时写入最少的转储信息,基本上会占用2MB左右的硬盘空间。 核心内存转储,这个选项将在系统崩溃时转储全部的核心内存,这会占用50MB左右的硬盘空间。 完全内存转储,这个选项会在系统崩溃时转储全部的内存,这将会耗费和物理内存一样多的空间用来保存数据。可以删除!debug dump files:这是人为调试或系统测试产生的垃圾文件。可以删除!

一首先什么是core dump?

Core的本身意思是内存, Dump的本身意思是扔堆出来。

当我们开发并且使用 Unix程序时, 有时程序会down了, 却没有任何的提示这时候你可以查看一下有没有样子像core进程号的文件生成, 这个文件是 *** 作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考。

总的来说core dump其实叫核心转储, 它是当程序运行过程中发生异常,  由 *** 作系统把程序当前的内存状况存储在一个core文件中, 所以叫core dump。

二怎么使用Core Dump?

首先我们打开Linux下,然后使用: 

#gdb -c corepid program_name 

就可以进入gdb模式。 

输入where,就可以指出是在哪一行被Down掉,哪个function内,怎么调用等等。 

(gdb) where 

或者输入 bt。 

(gdb) bt 。

在linux平台下,设置core dump文件生成的方法:

1 )如何生成 coredump 文件

登陆 LINUX 服务器,任意位置键入

echo "ulimit -c 1024" >> /etc/profile

退出 LINUX 重新登陆 LINUX

键入 ulimit -c

如果显示 1024 那么说明 coredump 已经被开启。

1024 限制产生的 core 文件的大小不能超过 1024kb,可以使用参数unlimited,取消该限制

ulimit -c unlimited

2 ) core 文件的简单介绍

在一个程序崩溃时,它一般会在指定目录下生成一个 core 文件。 core 文件仅仅是一个内存映象 ( 同时加上调试信息 ) ,主要是用来调试的。

3 ) 开启或关闭 core 文件的生成

用以下命令来阻止系统生成 core 文件 :

ulimit -c 0

下面的命令可以检查生成 core 文件的选项是否打开 :

ulimit -a

该命令将显示所有的用户定制,其中选项 -a 代表“ all ”。

也可以修改系统文件来调整 core 选项

在 /etc/profile 通常会有这样一句话来禁止产生 core 文件,通常这种设置是合理的 :

# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

但是在开发过程中有时为了调试问题,还是需要在特定的用户环境下打开 core 文件产生的设置。

在用户的 ~/bash_profile 里加上 ulimit -c unlimited 来让特定的用户可以产生 core 文件。

如果 ulimit -c 0 则也是禁止产生 core 文件,而 ulimit -c 1024 则限制产生的 core 文件的大小不能超过 1024kb

4 ) 设置 Core Dump 的核心转储文件目录和命名规则

/proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展 ,如果添加则文件内容为 1 ,否则为 0

proc/sys/kernel/core_pattern 可以设置格式化的 core 文件保存位置或文件名 ,比如原来文件内容是 core-%e

可以这样修改 :

echo "/corefile/core-%e-%p-%t" > core_pattern

将会控制所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳

以下是参数列表 :

%p - insert pid into filename 添加 pid

%u - insert current uid into filename 添加当前 uid

%g - insert current gid into filename 添加当前 gid

%s - insert signal that caused the coredump into the filename 添加导致产生 core 的信号

%t - insert UNIX time that the coredump occurred into filename 添加 core 文件生成时的 unix 时间

%h - insert hostname where the coredump happened into filename 添加主机名

%e - insert coredumping executable name into filename 添加命令名

6 ) 一个小方法来测试产生 core 文件

直接输入指令 :

kill -s SIGSEGV $$

发生coredump一般都是在进程收到某个信号的时候,Linux上现在大概有60多个信号,可以使用 kill -l 命令全部列出来。

针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式, 默认处理是coredump的信号如下:

3)SIGQUIT 4)SIGILL 6)SIGABRT 8)SIGFPE 11)SIGSEGV 7)SIGBUS 31)SIGSYS

5)SIGTRAP 24)SIGXCPU 25)SIGXFSZ 29)SIGIOT

我们看到SIGSEGV在其中,一般数组越界或是访问空指针都会产生这个信号。另外虽然默认是这样的,但是你也可以写自己的信号处理函数改变默认行为。

上述内容只是产生coredump的必要条件,而非充分条件。要产生core文件还依赖于程序运行的shell,可以通过ulimit -a命令查看

如前文所述,当 linux 系统内核发生崩溃的时候,可以通过 kdump 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行 *** 作系统的代码改进。那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。使用 crash 的先决条件由于 crash 用于调试内核崩溃的转储文件,因此使用 crash 需要依赖如下条件:1 kernel 映像文件 vmlinux 在编译的时候必须指定了 -g 参数,即带有调试信息。2 需要有一个内存崩溃转储文件(例如 vmcore),或者可以通过 /dev/mem 或 /dev/crash 访问的实时系统内存。如果 crash 命令行没有指定转储文件,则 crash 默认使用实时系统内存,这时需要 root 权限。3 crash 支持的平台处理器包括:x86, x86_64, ia64, ppc64, arm, s390, s390x ( 也有部分 crash 版本支持 Alpha 和 32-bit PowerPC,但是对于这两种平台的支持不保证长期维护 )。4 crash 支持 225-15(含)以后的 Linux 内核版本。随着 Linux 内核的更新,crash 也在不断升级以适应新的内核。crash 安装指南要想使用 crash 调试内核转储文件,需要安装 crash 工具和内核调试信息包。不同的发行版安装包名称略有差异,这里仅列出 RHEL 和 SLES 发行版对应的安装包名称如下:表 1 crash 工具和内核调试包系统版本crash 工具名称内核调试信息包RHEL62crashkernel-debuginfo-commonkernel-debuginfoSLES11SP2crashkernel-default-debuginfokernel-ppc64-debuginfo以 RHEL 为例,安装 crash 及内核调试信息包的步骤如下:rpm -ivh crash-518-1el6ppc64rpmrpm -ivh kernel-debuginfo-common-ppc64-2632-220el6ppc64rpmrpm -ivh kernel-debuginfo-2632-220el6ppc64rpm启动 crash启动参数说明使用 crash 调试转储文件,需要在命令行输入两个参数:debug kernel 和 dump file,其中 dump file 是内核转储文件的名称,debug kernel 是由内核调试信息包安装的,不同的发行版名称略有不同,以 RHEL 和 SLES 为例:RHEL62:/usr/lib/debug/lib/modules/2632-220el6ppc64/vmlinuxSLES11SP2:/usr/lib/debug/boot/vmlinux-3013-027-ppc64debug使用 crash -h 或 man crash 可以查看 crash 支持的一系列选项,这里仅以常用的选项为例说明如下:-h:打印帮助信息-d:设置调试级别-S:使用 /boot/Systemmap 作为默认的映射文件-s:不显示版本、初始调试信息等,直接进入命令行-i file:启动之后自动运行 file 中的命令,再接受用户输入

Linux抓包是通过注册一种虚拟的底层网络协议来完成对网络报文(准确的说是网络设备)消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。( 聊聊 tcpdump 与 Wireshark 抓包分析 )

具体是使用libpcap获取被监听网络接口的数据( tcpdump 抓包的原理? )

过滤器规则是tcpdump的核心技能,否则抓取的包太多,也根本无法分析。

为了提高网络效率,一个包也可以包含标志的组合,比如 [S] , [FP]

------解决方案--------------------------------------------------------探讨core dump

通常是因为SEGMENT FAULT, 一般是访问越界引起的。

------解决方案--------------------------------------------------------段错误 一般是非法访问内存造成的

核心已转储 (core dump) -- 内存清除,早期的内存用磁芯存储器

------解决方案-------------------------------------------------------- 通常是指针、内存等错误;

错误会存储到coredump文件,用gdb等工具可对coredump文件分析,定位错误发生的位置;

------解决方案-------------------------------------------------------- 进程意外退出会在当前目录下产生形如‘core数字’的文件比如‘core1234’使用命令gdb 运行程序名 core数字

进入gdb然后使用bt命令

可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。

------解决方案-------------------------------------------------------- IT人都叫这个“出core了”。

以上就是关于win8系统中dump日志文件怎么看全部的内容,包括:win8系统中dump日志文件怎么看、什么是Core Dump怎么使用、RedHat Linux下如何生成core dump文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9527594.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存