Как я могу посчитать системные вызовы в программе Go на OS X?

#c #go #system-calls

#c #Вперед #системные вызовы

Вопрос:

Я пытаюсь посчитать системные вызовы в моей программе Go на OS X Yosemite. Я пытался использовать dtruss и dtrace , но оба они приводят к сбою моей программы со следующей ошибкой, за которой следует трассировка стека:

 fatal error: runtime: bsdthread_register error
  

Две команды, которые я использовал, это:

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

Вещи, которые я пробовал

Основной вывод из моего Google-foo заключался в сбросе DYLD_INSERT_LIBRARIES , что я делал много раз безрезультатно.

./my_program это двоичный файл, который я создал go install . Я написал эквивалентную программу на C, и обе вышеуказанные команды отлично с этим справляются.

Комментарии:

1. @JimB спасибо, это решило мою проблему.

Ответ №1:

Если вы хотите использовать dtrace на macOS, вам нужно будет использовать внешний компоновщик для сборки вашей программы

 -ldflags -linkmode=external