Linux环境崩溃⽣成core⽂件以及调试Windows环境崩溃问题可根据vs调试⼯具查看,Linux同样可以查看调⽤堆栈的信息,只是
需要更改Linux设置,使程序崩溃时候产⽣core⽂件。然后gdb调试即可。
1产⽣core⽂件⽅法
当前会话的ulimit –c,若为0,则不会产⽣对应的coredump,需要进⾏修改和设置。
产⽣coredump的条件,⾸先需要确认当前会话
ulimit -c unlimited (可以产⽣coredump且不受⼤⼩限制),这种设置仅对当前⽣效,如果想永久⽣效
那么需要在
/etc/profile中加⼊以下⼀⾏,这将允许⽣成coredump⽂件
ulimit-c unlimited
2更改core dump⽣成路径
因为core dump默认会⽣成在程序的⼯作⽬录,但是有些程序存在切换⽬录的情况,导致core dump⽣成的路径没有规律,
所以最好是⾃⼰建⽴⼀个⽂件夹,存放⽣成的core⽂件。
我建⽴⼀个 /data/coredump ⽂件夹,在根⽬录data⾥的coredump⽂件夹。
调⽤如下命令
echo /data/coredump/core.%e.%p> /proc/sys/kernel/core_pattern
linux命令查看文件夹大小将更改core⽂件⽣成路径,⾃动放在这个/data/coredump⽂件夹⾥。
%e表⽰程序名, %p表⽰进程id
3测试⽣成core⽂件以及调试
该程序在core_test1()内部scanf的时候回崩溃,i前⾯应该加上&
编译的时候带上-g选项,这样才能⽤gdb调试core
运⾏后结果显⽰段错误
进⼊/data/coredump⽂件夹可以查看⽣成的core
⽤gdb调试该core,命令为 st.6408 ,显⽰如下
program terminated with signal 11 告诉我们信号中断了我们的程序
敲命令: bt 可以打印堆栈信息
这个⼀堆问号很多⼈遇到过,有⼈说是没加载符号表,有⼈说是标准glibc版本不⼀致,
可以通过如下命令调试:
gdb 可执⾏程序exe
进⼊gdb环境后
core-file core的名字
敲命令bt可以查看准确信息。
⽰例:
gdb ./ctest
进⼊gdb环境后,敲core-file /data/st.6408
敲bt命令,这是gdb查看back trace的命令
可以看到最近的栈中存储的是调⽤了IO操作,之前⼀步是scanf,再往前能看到是ctest.cpp中第九⾏ core_test1()函数出错。
到此为⽌,就是core⽂件配置⽣成和调试⽅法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论