Mac OS XでDtrussを入手するには、子プロセスを正常にトレースしますか? -- macos フィールド と dtruss フィールド 関連 問題

How can I get dtruss on Mac OS X to successfully trace child processes?












9
vote

問題

日本語

<コード> dtruss のマニュアルページ:

<事前> <コード> -f follow children as they are forked

どのように私が欲しいもののように聞こえます。ただし、次のような動作を観察します。

<事前> <コード> WhiteAndNerdy% uname -a Darwin WhiteAndNerdy.local 13.4.0 Darwin Kernel Version 13.4.0: Wed Dec 17 19:05:52 PST 2014; root:xnu-2422.115.10~1/RELEASE_X86_64 x86_64 WhiteAndNerdy% sudo dtruss -f -t writev /bin/echo hello world hello world PID/THRD SYSCALL(args) = return 37273/0x90e264: writev(0x1, 0x7F8832D00000, 0x4) = 12 0 WhiteAndNerdy% sudo dtruss -f -t writev sh -c '/bin/echo hello world' PID/THRD SYSCALL(args) = return WhiteAndNerdy% sudo dtruss -f -t writev bash -c '/bin/echo hello world' PID/THRD SYSCALL(args) = return WhiteAndNerdy% sudo dtruss -f -t writev zsh -c '/bin/echo hello world' PID/THRD SYSCALL(args) = return 37295/0x90e39b: fork() = 0 0 WhiteAndNerdy% sudo dtruss -f -t writev env /bin/echo hello world PID/THRD SYSCALL(args) = return WhiteAndNerdy%

最初のケースを除いて、「こんにちは世界」は印刷されていません。 (そして、それはわずかに見られないことだけではありません。長時間かかるプロセスを実行すると、<コード> 9988777663 および類似の場合はいつでもかかりません。全体の私がした実験は、最初の<コード> exec で実行するだけで実行が停止するように見えます。)

だから、私は実際にどの dtruss -f を実行していますか。 strace -f のように動作するようにするにはどうすればよいですか。

モチベーション:私はOS XでHaskell開発をしています。 cabal (Haskellのビルドシステム)の実行中に何が起こっているのかを追跡します。 OS XバージョンのHaskellプラットフォームのOS Xバージョンでは、 strace -f はシェルスクリプトであるため、Cabal Returnsの dtruss -f を実行します。 ■コード> -f follow children as they are forked 1 。もちろん、 -f follow children as they are forked 2 を直接実行するだけで、その問題を回避することができますが、それでも -f follow children as they are forked 3 はまさに回転して<コードを回すつもりです。 > -f follow children as they are forked 4 他のものの束。 (<コード> -f follow children as they are forked 5 を考えてください。)

英語

The dtruss man page says:

       -f     follow children as they are forked 

which sounds like exactly what I want. However, observe the following behavior:

WhiteAndNerdy% uname -a Darwin WhiteAndNerdy.local 13.4.0 Darwin Kernel Version 13.4.0: Wed Dec 17 19:05:52 PST 2014; root:xnu-2422.115.10~1/RELEASE_X86_64 x86_64 WhiteAndNerdy% sudo dtruss -f -t writev /bin/echo hello world hello world     PID/THRD  SYSCALL(args)          = return 37273/0x90e264:  writev(0x1, 0x7F8832D00000, 0x4)        = 12 0  WhiteAndNerdy% sudo dtruss -f -t writev sh -c '/bin/echo hello world'     PID/THRD  SYSCALL(args)          = return  WhiteAndNerdy% sudo dtruss -f -t writev bash -c '/bin/echo hello world'     PID/THRD  SYSCALL(args)          = return  WhiteAndNerdy% sudo dtruss -f -t writev zsh -c '/bin/echo hello world'     PID/THRD  SYSCALL(args)          = return 37295/0x90e39b:  fork()      = 0 0  WhiteAndNerdy% sudo dtruss -f -t writev env /bin/echo hello world     PID/THRD  SYSCALL(args)          = return  WhiteAndNerdy% 

Note that except for the first case, "hello world" is not printed. (And it isn't just a matter of the output not being seen; if I run a process that takes a long time, it doesn't take any time under the sh -c and similar cases. In all the experiments I've done, it appears that execution simply stops at the first exec.)

So, I'm puzzled what dtruss -f actually does. How can I get it to behave like strace -f on Linux, which does what I want?

Motivation: I'm doing some Haskell development on OS X, and would like to trace what's happening during a run of cabal (Haskell's build system). Running dtruss -f on cabal returns without doing anything at all, because in the OS X version of the Haskell Platform, /usr/bin/cabal is a shell script which execs /Library/Haskell/bin/cabal.real. Of course, I can get around that problem by just running /Library/Haskell/bin/cabal.real directly, but that still doesn't buy me much, since cabal.real is just going to turn around and exec a bunch of other stuff. (Think make if you're not familiar with Haskell.)

</div
     

回答リスト

-4
 
vote

DTRUSSは単なる高度なDTraceスクリプトであるため、自分のものを簡単に作成してキャプチャして、すべてのFork / EXEC呼び出しが新しくフォークされたプロセス上の新しいDTraceスクリプトを作成してトレースします。もう1つのオプションは-WオプションチェックマンDTRACEをチェックします。

 

Given dtruss is just an advanced dtrace script, you can easily write your own and capture all fork/exec calls spawn new dtrace scripts on those newly forked processes and trace them. The other option is -W option check man dtrace.

</div
 
 

関連する質問

9  Mac OS XでDtrussを入手するには、子プロセスを正常にトレースしますか?  ( How can i get dtruss on mac os x to successfully trace child processes ) 
<コード> dtruss のマニュアルページ: <事前> <コード> -f follow children as they are forked どのように私が欲しいもののように聞こえます。ただし、次のような動作を観察します。 <事...

0  Apple System Integrity Protectionに関するMacOSアプリの問題  ( Macos app issue with apple system integrity protection ) 
私はMacOSアプリに取り組んでいます。アプリはすでにMac App Storeに住んでいます。 私のユーザーの中には、アプリを開くことができないことを報告しています。正確な理由を調べるために、私はユーザーの一人にアクセスし、このコマンドを使用して低レベルのロ...

1  OS Xアプリケーションでのファイル記述子リークを見つける  ( Locating file descriptor leak in os x application ) 
背景 私はいくつかの非常に複雑なアプリケーションを持っています。カップルライブラリの構成です。 今、QAチームがいくつかの問題を見つけました(何かがエラーを報告します)。 FROMMログでは、アプリケーションがファイル記述子を漏らしていることがわかります(7時...

3  私のDrussトレースにexecve呼び出しがないのはなぜですか?  ( Why are there not any execve calls in my dtruss trace ) 
このようなスクリプトを持っています: <コード> script.sh <事前> <コード> #!/bin/bash clang -v dtruss を実行すると、 { [key: string]: any }0 の呼び出しが { [key: s...

11  ProjectのためのNode_Modulesのロケーションをグローバルに設定します  ( Globally set node modules location for project ) 
を書いたら <事前> <コード> var moment = require('moment'); 私のプロジェクトでは、この dtruss 出力は、実際にはファイルを含まない場所では多くの時間を浪費します。 <事前> <コード> PID/T...

7  DTRUSSはOS X 10.11でPSで失敗します  ( Dtruss fails on ps on os x 10 11 ) 
私はどのSYSCALL ps がOS X 10.11(EL CAPITAN)でのコマンドラインを取得し、次のエラーになりましたが、次のエラーになりました。 <事前> <コード> # dtruss ps -p 43520 -o args dtrace: fa...

0  DTRUSS DTRUSS(DRID_BIND_AT_LAUNCHとSSHFSマウントはOSX 10.9にありますか?  ( Dtruss with dyld bind at launch and sshfs mounts in osx 10 9 ) 
OSX 10.9では、このgist の例を構築しようとしています。 Plain <コード> cd /tmp git clone https://gist.github.com/ecfd80885b9ddf6734192c056cf48bf4.git fo...

0  Dtrussは電話を欠いていますか?  ( Is dtruss missing calls ) 
問題 Mac上のJCEFを使用してアプリケーションの起動の問題を診断しようとしています。 dtruss のように思われます。たとえば、プログラムは「icudtl.dat」を検索しなかった後に常に終了し、次のようなログメッセージを表示します。 <事前> <コー...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有