- 在Linux环境下输入:
ulimit -c unlimited;//不限制coredump的大小
ulimit -c unlimited echo “1” > /proc/sys/kernel/core_uses_pid //开启coredump后缀
echo “/mnt/core-%e-%p-%t” > /proc/sys/kernel/core_pattern //制定coredump的生成路径 - 程序出错时,会自动生成coredump文件
- set solib-search-path 库文件的目录(/data1/lib)
- gdb nostrip文件
- core-file coredump文件
常用命令:
查看当前调用栈:bt
查看所有调用栈:thread apply all bt
查看地址的内容:格式: x /nfu
查看变量内容:p
跳转到栈的某一帧:f + n
在进入gdb之后,可以使用 up down等进入不同层的函数。然后使用 p 可以打印任何在内容的变量内容。 比如 p i,打印变量i的值。 p *(bp), 打印 bp 指针对应的内容,甚至可以打印结构体,链表。方便定位当时的内容。
不过,由于是一个静态的内存镜像。有些变量的值,比如指针修改的内容。即便是在最上层函数打印,也会显示后面函数已经修改之后的值。因为这个内存在生成core的时候,已经被修改了。