問題タブ [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.
android - Android の SystemTap
Android でコマンド「staprun」を実行すると、次の問題が発生しました。
モジュール msyscall_all.ko は、私のアンドロイドが実行されているカーネルでクロスコンパイルされています。
まず、コマンド「insomd」と「lsmod」を使用して正しいことを確認しているため、msyscall_all.koが正確に正しいと確信しています。次のように実行しました。
次に、http: //omappedia.org/wiki/Systemtap#Systemtap_1.0_code_update_for_OMAP_ARM_platformsの指示に従いました。
そして、私の systemtap-1.0-omap はクロスコンパイルに成功しました!! ただし、「adb push」を使用して systemtap-1.0-omap を Android デバイスにプッシュして実行した後、以下のエラーが発生しました。
/data/systemtap-1.0-omap/bin/staprun: 1: 構文エラー: "(" 予期しない
「staprun」がubuntuで実行されたとき、「staprun」の実行方法についてアドバイスがあり、Androidデバイスで実行されたときはうまくいきませんでした:
頑張ったけど解けない!!
ubuntu - Ubuntu 3.2 で systemtap がトレース イベントを検出できない
/sys/kernel/debug/tracing/events ディレクトリにすべてのトレース イベントがあるにもかかわらず、systemtap はトレース イベントを見つけることができません。「perf record sched」を実行すると、すべての sched トレース イベントが問題なく検出されます。
システムは実行中です: Linux (なし) 3.2.0-48-virtual #74-Ubuntu SMP Thu Jun 6 20:02:55 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
stap -l 'kernel.trace("*")
イベントが見つかりません
systemtap はカーネル関数を問題なく検出します。
stap -l 'kernel.function("*")'
.. kernel.function("AUDIT_MODE@/build/buildd/linux-3.2.0/security/apparmor/include/policy.h:311") kernel.function("BLEND_OP@/build/buildd/linux-3.2.0") /crypto/sha256_generic.c:48") kernel.function("BLOCK_NEXT@/build/buildd/linux-3.2.0/drivers/staging/zram/xvmalloc.c:82") ....
openSUSE で報告されたバグを見ました。
バグ 800335 - devel:tools/systemtap: libebl1 に対する宣言されていない依存関係
しかし、libebl1 は既にインストールされている Elfutils パッケージの一部です。systemtap でトレース イベントが見つからないという問題が発生する可能性があります。
ありがとう、アメール。
c++ - gdb をアタッチできるように、systemtap プローブを介してプロセスを停止できますか?
特定の子プロセスのデバッグが困難なマルチプロセス アプリケーションがあります。プロセス間のメッセージング タイムアウトが原因で、gdb をターゲットの子プロセスにアタッチする時間がないため、systemtap プローブを介してプロセスを停止できるかどうか疑問に思っていました。
単純なプローブが必要になるはずです。たとえば、次のようになります。
残念ながら、上記はコンパイルされていません...何かアイデアはありますか?
私は systemtap の専門家ではないので、これはおそらく最善の解決策ではありませんが、興味のある人のための私の大まかな解決策は次のとおりです。
rpm - systemtap 他のコンピューター用のインストルメンテーションの生成
https://sourceware.org/systemtap/SystemTap_Beginners_Guide/cross-compiling.html#preppingxcompileによると、次の手順に従って、他のコンピューティング用のインストルメンテーションを生成できます。
*1. 各ターゲット システムに systemtap-runtime RPM をインストールします。
各ターゲット システムで uname -r を実行して、各ターゲット システムで実行されているカーネルを特定します。
ホストシステムに SystemTap をインストールします。ホスト システム上にターゲット システム用のインストルメンテーション モジュールを構築します。SystemTap のインストール方法については、「SystemTap のインストール」を参照してください。
以前に決定したターゲット カーネル バージョンを使用して、セクション2.1.2「必要なカーネル情報 RPM のインストール」で説明されている方法で、ホスト システムにターゲット カーネルと関連する RPM をインストールします。複数のターゲット システムが異なるターゲット カーネルを使用している場合は、ターゲット システムで使用されている異なるカーネルごとにこの手順を繰り返す必要があります。
**私の質問は
- 1 つのホスト システムに複数バージョンの kernel-devel をインストールする方法は?
- kernel-devel、kernel-debuginfo、kernel-debuginfo-common をアンインストールし、ターゲット ホスト用にそれらの新しいセットをインストールしようとしました (ターゲット ホストとこのホストのバージョンは異なります)。その後、「stap -- remote xxx" にも同じカーネル バージョンが必要です。どうすれば生活が楽になりますか? ターゲット ホストのカーネル バージョンと一致するようにカーネルを再インストールする必要がありますか? **
$ sudo rpm -ivh ダウンロード/kernel-devel-2.6.32-220.el6.x86_64.rpm
[sudo] zhifan のパスワード:
warning: download/kernel-devel-2.6.32-220.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY Preparing... ############## ############################ [100%]
sockets - Systemtap %M printf 形式は 1 文字のみを返します
ソケットで受信したデータ (sys_recv が返されたときの ubuf の内容) を出力しようとしています。%M 書式指定子が正しく機能しません。誰かがそれを適切に使用する方法を説明できますか。ありがとう
このプローブを使用: [laris@kakitis stap]$ cat socket-recv.stp
マニュアルページを読んだところ、フォーマット %10M は $ubuf:void が指す場所から 10 バイトを返すはずですが、1 しか取得できませんでした。パラメーター 10 を調整すると、メモリの増減ではなく、1 文字の出力がシフトします。
10 を 2 に変更すると、次のようになります。
システムの詳細は次のとおりです。