UNIX/C:core dump

本文解释了计算机科学中core的概念,包括早期的磁芯内存(core memory),以及现代编程中程序崩溃时产生的核心转储(core dump)。讨论了core dump的作用、如何生成及避免,并介绍了如何利用core文件进行调试。

何谓 core?
在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明 者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。如今 ,半导体工业澎勃发展,已经没有人用 core memory 了,不过,在许多情况下, 人们还是把记忆体叫作 core 。
何谓 core dump?
我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系 统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger 做为参考。这个动作就叫作 core dump。
为何会发生 core dump?
前面说过,在程序当掉时出错。在 C/C++语言中,最常发生错误的地方就是指 针有问题。您可以利用 core 文件和 debugger 把错误找出来(要怎麽在 debugger 中使用 core 文件?man 一下 gdb 吧!)。
我可以把 core 文件删掉吗?
如果你不会、不能、不需要修改程序,那就放心地把它删除了吧!
要怎麽才不会让 core 文件出现?
如果用的是tcsh的话, 以试著在 .tcshrc 里加一行:
limit coredumpsize 0
如果用的是bash的话, 在/etc/profile里加上(或者修改)一条:
ulimit -c 0

有一招, 可以让你看出 core 最好用的地方 :)
gdb -c core, 进去後打 where, 就可以 show 出你是在程序哪一行当掉的, 还有在当掉时在哪个 function 里, 这个 function 是被哪个 function 所 call 的, 而这个 function 又是被哪个 function 所 call 的.... 一直到 main()

由这个信息, 可以找出五六成的 bug........ 屡试不爽

但, 先决条件, 当你在 compile 时必须把 debug information(具体见编译器如GCC、CC等的用法) 的选项打开。不然, 就会出现一大堆你看不懂的东西,而不是你喜欢的源程序。

(base) root@luci-Rack-Server:~# dmesg | grep -i nvidia [ 9.084897] nvidia: loading out-of-tree module taints kernel. [ 9.084908] nvidia: module verification failed: signature and/or required key missing - tainting kernel [ 9.143704] nvidia-nvlink: Nvlink Core is being initialized, major device number 509 [ 9.154210] nvidia 0000:27:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none [ 9.223260] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:b7/0000:b7:01.0/0000:b8:00.1/sound/card3/input16 [ 9.225617] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:b7/0000:b7:01.0/0000:b8:00.1/sound/card3/input17 [ 9.225661] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:59/0000:59:01.0/0000:5a:00.1/sound/card1/input12 [ 9.226952] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:b7/0000:b7:01.0/0000:b8:00.1/sound/card3/input18 [ 9.227320] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:b7/0000:b7:01.0/0000:b8:00.1/sound/card3/input19 [ 9.228060] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:97/0000:97:01.0/0000:98:00.1/sound/card2/input20 [ 9.228297] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:59/0000:59:01.0/0000:5a:00.1/sound/card1/input13 [ 9.228692] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:97/0000:97:01.0/0000:98:00.1/sound/card2/input21 [ 9.229324] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:59/0000:59:01.0/0000:5a:00.1/sound/card1/input14 [ 9.231057] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:97/0000:97:01.0/0000:98:00.1/sound/card2/input22 [ 9.231424] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:59/0000:59:01.0/0000:5a:00.1/sound/card1/input15 [ 9.233614] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:97/0000:97:01.0/0000:98:00.1/sound/card2/input23 [ 9.244664] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:26/0000:26:01.0/0000:27:00.1/sound/card0/input8 [ 9.245106] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:26/0000:26:01.0/0000:27:00.1/sound/card0/input9 [ 9.245640] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:26/0000:26:01.0/0000:27:00.1/sound/card0/input10 [ 9.245955] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:26/0000:26:01.0/0000:27:00.1/sound/card0/input11 [ 9.382036] audit: type=1400 audit(1755652019.568:6): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe" pid=1955 comm="apparmor_parser" [ 9.382044] audit: type=1400 audit(1755652019.568:7): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe//kmod" pid=1955 comm="apparmor_parser" [ 9.384922] nvidia 0000:5a:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none [ 9.442966] nvidia 0000:98:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none [ 9.493792] nvidia 0000:b8:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none [ 9.542627] NVRM: loading NVIDIA UNIX Open Kernel Module for x86_64 570.86.15 Release Build (dvs-builder@U16-I2-C03-12-4) Thu Jan 23 22:50:36 UTC 2025 [ 9.567444] nvidia-modeset: Loading NVIDIA UNIX Open Kernel Mode Setting Driver for x86_64 570.86.15 Release Build (dvs-builder@U16-I2-C03-12-4) Thu Jan 23 22:33:58 UTC 2025 [ 9.570666] [drm] [nvidia-drm] [GPU ID 0x00002700] Loading driver [ 9.570669] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:27:00.0 on minor 2 [ 9.570767] [drm] [nvidia-drm] [GPU ID 0x00005a00] Loading driver [ 9.570769] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:5a:00.0 on minor 3 [ 9.570866] [drm] [nvidia-drm] [GPU ID 0x00009800] Loading driver [ 9.570867] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:98:00.0 on minor 4 [ 9.570938] [drm] [nvidia-drm] [GPU ID 0x0000b800] Loading driver [ 9.570938] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:b8:00.0 on minor 5 [ 18.602298] nvidia-uvm: Loaded the UVM driver, major device number 507. [ 1051.209710] NVRM: Xid (PCI:0000:5a:00): 119, pid=8086, name=nvidia-smi, Timeout after 45s of waiting for RPC response from GPU1 GSP! Expected function 76 (GSP_RM_CONTROL) (0x20800aff 0x10). [ 1051.209839] CPU: 26 PID: 8086 Comm: nvidia-smi Tainted: G OE 6.8.0-65-generic #68~22.04.1-Ubuntu [ 1051.209889] os_dump_stack+0xe/0x20 [nvidia] [ 1051.210322] _kgspRpcRecvPoll+0x54c/0x620 [nvidia] [ 1051.211086] _issueRpcAndWait+0x71/0x360 [nvidia] [ 1051.211501] rpcRmApiControl_GSP+0x67e/0xa10 [nvidia] [ 1051.211790] _gpushareddataSendDataPollRpc+0x61/0xaa [nvidia] [ 1051.212184] resControl_IMPL+0x1d1/0x1e0 [nvidia] [ 1051.212449] serverControl+0x48f/0x5c0 [nvidia] [ 1051.212711] _rmapiRmControl+0x4f2/0x840 [nvidia] [ 1051.213007] ? os_get_current_tick+0x3c/0xb0 [nvidia] [ 1051.213243] rmapiControlWithSecInfo+0x79/0x140 [nvidia] [ 1051.213530] ? os_acquire_spinlock+0x12/0x30 [nvidia] [ 1051.213766] rmapiControlWithSecInfoTls+0x8f/0xf0 [nvidia] [ 1051.214055] _nv04ControlWithSecInfo+0x8d/0xa0 [nvidia] [ 1051.214339] ? _nv04ControlWithSecInfo+0x8d/0xa0 [nvidia] [ 1051.214627] RmIoctl+0x64a/0xd60 [nvidia] [ 1051.215047] ? os_get_current_tick+0x3c/0xb0 [nvidia] [ 1051.215189] ? os_acquire_spinlock+0x12/0x30 [nvidia] [ 1051.215328] ? portSyncSpinlockAcquire+0x1d/0x50 [nvidia] [ 1051.215484] rm_ioctl+0x66/0x4f0 [nvidia] [ 1051.215729] nvidia_unlocked_ioctl+0x69c/0x920 [nvidia] [ 1051.215905] ? nvidia_unlocked_ioctl+0x166/0x920 [nvidia] [ 1096.224563] NVRM: Xid (PCI:0000:5a:00): 119, pid=8086, name=nvidia-smi, Timeout after 45s of waiting for RPC response from GPU1 GSP! Expected function 10 (FREE) (0xa55a00d0 0x0).
08-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值