《coredump的配置与调试.pdf》由会员分享,可在线阅读,更多相关《coredump的配置与调试.pdf(2页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 Linux Core Dump 配置与调试 1.core 文件的生成开关和大小限制-1)使用 ulimit-c 命令可查看 core 文件的生成开关。若结果为 0,则表示关闭了此功能,不会生成 core 文件。2)使用 ulimit c filesize 命令,可以限制 core 文件的大小(filesize 的单位为 kbyte)。若 ulimit-c unlimited,则表示 core 文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的 core 文件。在调试此 core 文件的时候,gdb 会提示错误。2.core 文件的名称和生成路径-若系统生成的 co
2、re 文件不带其它任何扩展名称,则全部命名为 core。新的 core 文件生成将覆盖原来的 core 文件。1)/proc/sys/kernel/core_uses_pid 可以控制 core 文件的文件名中是否添加 pid 作为扩展。文件内容为 1,表示添加 pid 作为扩展名,生成的 core 文件格式为 core.xxxx;为 0 则表示生成的 core 文件同一命名为 core。可通过以下命令修改此文件:echo 1 /proc/sys/kernel/core_uses_pid 2)proc/sys/kernel/core_pattern 可以控制 core 文件保存位置和文件名格式
3、。可通过以下命令修改此文件: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
4、添加导致产生 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 添加命令名 3.用 gdb 查看 core 文件:下面我们可以在发生运行时信号引起的错误时发生 core dump 了.发生 core dump 之后,用 gdb 进行
5、查看 core 文件的内容,以定位文件中引发 core dump 的行.gdb execfile core file 如:gdb./test test.core 在进入 gdb 后,用 bt 命令查看 backtrace 以检查发生程序运行到哪里,来定位 core dump 的文件-行.4.开发板上使用 core 文件调试-如果开发板的操作系统也是 linux,core 调试方法依然适用。如果开发板上不支持 gdb,可将开发板的环境(头文件、库)、可执行文件和 core 文件拷贝到 PC 的 linux 下,运行相关命令即可。注意:待调试的可执行文件,在编译的时候需要加-g,core 文件才能
6、正常显示出错信息!注意的问题:在 Linux 下要保证程序崩溃时生成 Coredump 要注意这些问题:一、要保证存放 Coredump 的目录存在且进程对该目 录有写权限。存放 Coredump 的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目 录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看”/proc/进程pid/cwd“符号链接的目标来确定进程 真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。二、若程序调用了 seteuid()/setegid()改变 了进程的有效用户或组,则在默认情
7、况下系统不会为这些进程生成 Coredump。很多服务程序都会调用 seteuid(),如 MySQL,不论你用什么用 户运行 mysqld_safe 启动 MySQL,mysqld 进行的有效用户始终是 msyql 用户。如果你当初是以用户 A 运行了某个程序,但在 ps 里看到的 这个程序的用户却是 B 的话,那么这些进程就是调用了 seteuid 了。为了能够让这些进程生成 core dump,需要将/proc/sys/fs/suid_dumpable 文件的内容改为 1(一般默认是 0)。三、这个一般都知道,就是要设置足够大的 Core 文件大小限制了。程序崩溃时生成的 Core 文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被 破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。因此无论程序正常运行时占用 的内存多么少,要保证生成 Core 文件还是将大小限制设为 unlimited 为好。
限制150内