# Darwin debugging for the Linux developer

These technical notes are meant to explain to a Linux developer what are the equivalents to debug certain things over Darwin.

### Key differences from Linux

Linux tool |  macOS equivalent                       | Purpose
-----------|-----------------------------------------|------------------------
`strace`   | `dtruss` (1), [`strace-macos`](https://github.com/Mic92/strace-macos)            | System call tracing
`perf`     | `sample`, `spindump`, `Instruments` (2) | Performance profiling
`ss`       | `netstat -nv`                           | Socket statistics
`iostat`   | `iostat -Id`                            | Disk I/O statistics
`lsof`     | `lsof`                                  | Open file listings
`/proc`    | `vmmap`, `heap`, `lsof`                 | Process/memory information
`blktrace` | `fs_usage -wf filesys`                  | Trace real-time IO activity

(1): `dtruss` is unavailable on systems with System Integrity Protection enabled (SIP). Lix CI machines have SIP enabled.

(2): `Instruments` is a graphical application that requires a remote desktop and cannot be used over SSH.

### Getting flamegraphs out of `sample`

Combine <https://github.com/brc7/flamegraph-sample/blob/master/stackcollapse-sample.py> with <https://speedscope.app/>.

### Inspecting memory allocations

`heap` can give a list of allocations sorted by sizes when it can recognize the type in-memory (doesn't always work for everything).

### `iostat` tips

`iostat -Id` on macOS will return as the first row the cumulative data *SINCE* the first boot.

`xfrs` := IO operations per second.

### Listing file descriptors

`/proc` doesn't exist on macOS, therefore, `lsof` is the only thing that can list file descriptors and let you understand the relationships.

### Tracing network activity

`fs_usage -wf network` can trace real-time network activity on file descriptors.

### Checking Internet quality

`networkQuality -v` will dump an Apple-infrastructure Internet connection check for bandwidth and latency.