- 系统级别的core dumps开关
- 把 limit core unlimited 添加到 /etc/launchd.conf 文件
- 没有 /etc/launchd.conf 文件就创建一个
- 然后重启电脑
- /cores 文件夹必须保证是可写的
- 让普通的用户都可写
drwxrwxr-t@ 2 root admin 68 Aug 21 23:08 cores
sudo chmod o+w /cores
drwxrwxrwt@ 2 root admin 68 Aug 21 23:08 cores
- 默认显示隐藏文件
defaults write com.apple.finder AppleShowAllFiles TRUE
- 在Terminal下面运行
- 预先在Shell里面设置core dumps的大小不限制
ulimit -c unlimited
- 如果是csh的话,用下列指令
limit coredumpsize unlimited
- 测试
$/Applications/TextEdit.app/Contents/MacOS/TextEdit
再开一个终端执行kill$ killall -ABRT TextEdit
/cores目录下生成core.*文件即设置成功
使用转储
otool 命令查看core dumps
gdb/lldb的 -c 参数来调试core dumps
lldb -c /cores/core.***
注意:开启SIP保护的设备可能无法自动生成转储文件
关闭SIP保护
- 重启 Mac,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode
- 顶部导航栏,点击 Utilities > Terminal
- 在 Terminal 中输入 csrutil disable,之后回车
- 重启 Mac
Panic Dump
需双机调试,最好都使用网线
调试机(非panic dump机)
- 创建转储文件夹
sudo mkdir /PanicDumps
- 赋予文件夹任意写权限
sudo chown root:wheel /PaincDumps
sudo chmod 1777 /PanicDumps
- 激活转储服务
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.kdump.plist
查看激活状态,0表示已激活server$ sudo launchctl list | grep kdump
Password:********
- 0 com.apple.kdumpd
被调试机(panic dump机)
- 设置内核Panic时核心转储参数
sudo nvram boot-args="debug=0xd44 _panic_ip=[MAC IP ADDR]"
sudo reboot
重启后生效
- 测试Panic Dump
使用DTrace触发panicsudo dtrace -w -n "BEGIN{ panic();}"
系统会崩溃重启或者挂起,若挂起按Left-⌘
+ Right-⌘
+ Power
- 使用Panic Dump
崩溃后,在调试机的/PanicDumps 目录下找到xnu-xxx.gz,并解压调试:gunzip xnu-xxx.gz
lldb -c /PanicDump/core-xnu-xxxxxx
target create --core "/PanicDumps/core-xxxxxx"
- 取消panic dump
sudo nvram -d boot-args
sudo reboot
0 评论:
发表评论