gragas gragas - 1 month ago 7
C Question

How can I count syscalls in a Go program on OS X?

I'm trying to count the syscalls in my Go program on OS X Yosemite. I've tried using

dtruss
and
dtrace
, but both cause my program to crash with the following error, followed by a stack trace:

fatal error: runtime: bsdthread_register error


The two commands I've used are:


  1. sudo dtruss "./my_program my_arg"

  2. sudo dtrace -c "powerset 2" -n 'syscall:::entry { @num[probefunc] = count(); }'



Things I've Tried



The main takeaway from my Google-foo has been to unset
DYLD_INSERT_LIBRARIES
, which I have done numerous times to no avail.

./my_program
is a binary that I created with
go install
. I've written an equivalent C program and both of the above commands work fine with that.

Answer

If you want to use dtrace on macOS, you will need to use the external linker to build your program

-ldflags -linkmode=external
Comments