时时勤拂拭,勿使惹尘埃

TOC

Categories

macOS(一)核心转储Core&Panic Dump


Core Dump

  1. 系统级别的core dumps开关
    1. 把 limit core unlimited 添加到 /etc/launchd.conf 文件
      1. 没有 /etc/launchd.conf 文件就创建一个
    2. 然后重启电脑
  2. /cores 文件夹必须保证是可写的
    1. 让普通的用户都可写
      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
      
  3. 默认显示隐藏文件
    defaults write com.apple.finder AppleShowAllFiles TRUE
    
  4. 在Terminal下面运行
    1. 预先在Shell里面设置core dumps的大小不限制
      ulimit -c unlimited
      
    2. 如果是csh的话,用下列指令
      limit coredumpsize unlimited
      
  5. 测试
    $/Applications/TextEdit.app/Contents/MacOS/TextEdit
    
    再开一个终端执行kill
    $ killall -ABRT TextEdit
    
    /cores目录下生成core.*文件即设置成功
  6. 使用转储
    otool 命令查看core dumps
    gdb/lldb的 -c 参数来调试core dumps
    lldb -c /cores/core.***
    

    注意:开启SIP保护的设备可能无法自动生成转储文件

    关闭SIP保护
    1. 重启 Mac,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode
    2. 顶部导航栏,点击 Utilities > Terminal
    3. 在 Terminal 中输入 csrutil disable,之后回车
    4. 重启 Mac

    Panic Dump

    需双机调试,最好都使用网线

    调试机(非panic dump机)

  7. 创建转储文件夹
    sudo mkdir /PanicDumps
    
  8. 赋予文件夹任意写权限
    sudo chown root:wheel /PaincDumps 
    sudo chmod 1777 /PanicDumps
    
  9. 激活转储服务
    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机)

  10. 设置内核Panic时核心转储参数
    sudo nvram boot-args="debug=0xd44 _panic_ip=[MAC IP ADDR]" 
    sudo reboot
    
    重启后生效
  11. 测试Panic Dump
    使用DTrace触发panic
    sudo dtrace -w -n "BEGIN{ panic();}"
    
    系统会崩溃重启或者挂起,若挂起按Left-⌘ + Right-⌘ + Power
  12. 使用Panic Dump
    崩溃后,在调试机的/PanicDumps 目录下找到xnu-xxx.gz,并解压调试:
    gunzip xnu-xxx.gz 
    lldb -c /PanicDump/core-xnu-xxxxxx 
    target create --core "/PanicDumps/core-xxxxxx"
    
  13. 取消panic dump
    sudo nvram -d boot-args 
      sudo reboot
    

0 评论:

发表评论