問題タブ [systemtap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - sock_sendmsg(): カーネルによる暗黙の関数呼び出し
sock_sendmsg()
で定義されているカーネルの関数にハンドラーをフックすることにより、Linux 上の特定のプロセスによって送信されたすべてのデータをダンプしようとしましたlinux/socket.c
。probe kernel.function("sock_sendmsg@net/socket.c")
2 番目の引数で渡されたすべてのデータ ブロックをダンプするための systemtap プローブ ハンドラーを作成することで、これを行うことができますstruct msghdr *msg
。
からの抜粋は次のnet/socket.c
とおりです。
systemtap スクリプトをテストしましたhook_sendmsg.stp
。まずhook_sendmsg.stp
、1 つのターミナルで実行しました。次に、別のターミナルを開き、telnet
コマンドを呼び出して接続し、ターミナルstackoverflow.com
に入力HEAD / HTTP/1.0<Enter twice>
しました。hook_sendmsg.stp
から次の出力を得ました。
これはsock_sendmsg()
、 のコンテキストで合計 6 回呼び出されたことを示していますtelnet
。明らかに 3 番目と 4 番目は、Google のパブリック DNS サーバー8.8.8.8
と8.8.4.4
. 5行目と6行目は、 から送信されたHTTPリクエストの2行ですtelnet
。しかし、1 番目と 2 番目は何のために呼び出されたのでしょうか。それらはカーネルによって内部的に呼び出されましたか?
前もって感謝します。
ubuntu - ubuntu 上の Java の Systemtap
Java プロセスをトレースするだけでなく、systemtap での openjdk トレースの新しいサポート、ホットスポット トレースとメソッド トレースの両方を使用したいと考えています。
したがって、ddebs.ubuntu.com リポジトリをインストールして、カーネル デバッグ シンボルをインストールしました。その後、カーネル タップセットを使用するが、Java タップセットを使用しない stap スクリプトを呼び出すことができます。openjdk-7-jdk-dbgsym という名前のパッケージに気付き、それをインストールして、これに openjdk 用の systemtap タップセットがあるかどうかを確認しようとしましたが、これは openjdk-7-dbg パッケージと競合します (その後、ubuntu では許可されません)。 openjdk-7-jdk-dbgsym パッケージは「公式」サーバーからのものではないため、バグ レポート. 1 つをアンインストールしてもう 1 つをインストールしても、とにかく役に立ちません。
ubuntuでこれを成功させた人はいますか?
編集: java byteman をサポートする ubuntu でソースから systemtap を正常にビルドするには、
(またはあなたの奇妙なjvmの場所)
そうしないと、ビルドがjarを実行しないため、必要になります。次に、ソース dir java/README ファイルの手順に従って make install を実行する必要があります (パスを変更することを忘れないでください)。
別の --with-dyninst オプションもありますが、試したことはありませんが、他の呼び出しモードでは「修正」される可能性があります
edit2: まあ、それはコンパイルして実行さえしますが、与えられた例で BYTEMAN_HOME が設定されていても何も出力しません...
ubuntu - SystemTap セマンティック エラー、メンバー 'mnt_parent' が見つかりません
systemtap をインストールしました。stap -o を使用して結果をファイルに送信しようとすると、エラーが発生しました: sudo stap -o a.out b.stp
systemtap が使用する言語にとても混乱しています。誰でも私を助けることができますか?
eclipse - Eclipse / Ubuntu 13.10 x64 での C++ プログラムのコール グラフ
Eclipse / Ubuntu 13.10 x64 で C++ プログラムのコール グラフを描画したいと考えています。
SystemTap をインストールし、「初期テスト」を適切に開始できます。
しかし、プログラムの呼び出しグラフを取得しようとすると、次のようになります。
- プロジェクトを右クリックすると不正な fd 番号-> プロファイリング ツール -> 関数コールグラフ
- [実行] メニューからプロファイリングを起動すると、出力ファイルが破損する
これを Ubuntu で適切に動作させるにはどうすればよいですか?
systemtap - SystemTap 登録エラー
この Warning: probe kernel.function("some function@some file") (address 0xSomething) registration error (rc -84) を見たことがありますか? もしそうなら、あなたはそれを解決するために何をしましたか? これは警告であり、実行時 (Pass 5 の後) に発生します。しかし、登録エラーでその特定の機能のタップをスキップします。しかし、私はこの機能を調査する必要があります。これらの関数は __kprobes ではないことに注意してください。
私のカーネルは 3.11.0-15-generic (Ubuntu 12.04) で、SystemTap のバージョンは 2.4 です。
どうやらSytemTap のインストールを台無しにしてしまったようです。ここで(私による)2番目のコメントを参照してください。
remote-debugging - ソースコード付きのsystemtapリモートデバッグユーザープロセス
mongod
マシン Aで実行されているストリップ バージョン (シンボル テーブルなし) があります。これは運用サーバーです。
マシン上の BI には、ソース コードとストリップされていないmongod
バイナリ (シンボル テーブル付き) があります。次の製品の問題をリモートでデバッグしたい:
次のようなプローブが機能します。
しかし、この他のプローブ:
ではない。
A と B の両方にまったく同じバイナリ バージョンがあり、バイナリ パスも同じです。マシン B では、すべてのプローブが期待どおりに機能します。
mongod
この場合、リモートでデバッグするにはどうすればよいですか? 出来ますか?
android - Android Systemtap がモジュールをロードできない
GT-i9300 に単純な Systemtap モジュールをロードしようとしています。
エラーが発生します
モジュール '/sdcard/systemtap/modules/monitor_fopen.ko' の挿入エラー: モジュール内の不明なシンボル
私が取った手順:
1.デバイスでルートを取得します
2. カスタム カーネルをビルドする
3. ビルドされた zImage をデバイスにフラッシュします
4. systemtap を PC にインストールする
5. .stp ファイルを作成する
6. コンパイルされたカーネルを使用して、.stp ファイルから .ko ファイルをビルドします。
7. カスタム カーネルを実行するデバイスに Systemtap Android アプリをインストールします。
https://github.com/flipreverse/systemtap-android-app
8. アプリを起動し、アプリにルート アクセス権を付与します。
Superuser.apk は、Systemtap が root アクセスできるかどうかを尋ねます。
9. 手順 6 の .ko ファイルを SD カードにプッシュします。
10. モジュールをロードする
11. モジュールの読み込み結果を読み取る
ロードされたカーネル モジュール: monitor_fopen.ko 出力ファイル: monitor_fopen_2014.mm.dd_sss.* モジュール '/sdcard/systemtap/modules/monitor_fopen.ko' の挿入エラー: モジュール内の不明なシンボル
どのステップで間違ったのかわかりません。誰も手がかりを持っていますか?