linux下调试core的命令,察看堆栈状态命令

Linux 下调试 core
在 Linux 下编写程序时,有时会出现 Segment fault
的错误。此时内核会在当前工作目录下生成一个 core 文件(是一个内存映像,同时加上调试信息)。使用 gdb 可以查看 core 文件,可以指示出导致程序崩溃的代码位置。
首先,检查当前目录是否有 core 文件:
ll core
如果没有,则需要设置 ulimit
中的参数。以下为系统对用户的默认限制:
ulimit -a
输出可能如下:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15423
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) 15423
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
设置 core file size
的默认大小:
ulimit -c
输出可能如下:
core file size (blocks, -c) 1024
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15423
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) 15423
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
再次运行程序,就发现当前文件中有 core 文件。
现在开始调试该 core 文件:
gdb --core=core
bt
此时 gdb 不知道 core 中的符号,可以用 file
命令读取 test_core 的符号内容:
file test_core