Search code examples
macosunixsignalscoredump

Where are core dumps written on Mac?


On Mac OS X, if I send SIGQUIT to my C program, it terminates, but there is no core dump file.

Do you have to manually enable core dumps on Mac OS X (how?), or are they written to somewhere else instead of the working directory?


Solution

  • There is a great explanation by Quinn “The Eskimo!” on Apple's forums https://developer.apple.com/forums/thread/694233

    I roughly followed that guide. Here are the steps that I did.

    Grant write all access to the /cores dir

    PROMPT> ls -la / | grep cores
    drwxr-xr-x    2 root  wheel    64 Dec  8  2021 cores
    PROMPT> sudo chmod 1777 /cores
    PROMPT> ls -la / | grep cores
    drwxrwxrwt    2 root  wheel    64 Dec 21 23:29 cores
    

    Set size of core file

    PROMPT> ulimit -c unlimited
    

    Compile and sign the program

    PROMPT> cargo build --release -p my-crashing-program
    PROMPT> /usr/libexec/PlistBuddy -c "Add :com.apple.security.get-task-allow bool true" tmp.entitlements
    PROMPT> codesign -s - -f --entitlements tmp.entitlements my-crashing-program
    

    Run the program

    PROMPT> my-crashing-program
    thread 'main' panicked at 'boom', my-crashing-program/src/main.rs:74:5
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    dumping core for pid 80995
    zsh: quit       my-crashing-program
    

    Now there is a core file

    PROMPT> ls /cores
    core.80995
    

    Also Apple's Console app has a list with Crash Reports.