問題タブ [instrumentation]

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.

0 投票する
3 に答える
2764 参照

android - Android API のインストルメンテーション クラス

Android API について質問があります。Android API には「Instrumentation」クラスというクラスが用意されています。このクラスの用途は何ですか? インストルメンテーション クラスは、単体テストのために Junit と一緒にのみ使用されます。

Junit フレームワークを使用して、Instrumentation クラスを使用せずに Android API のメソッドをテストできます。

Junit パッケージは Android パッケージに含まれているため、単体テストのために install を個別に使用する必要がないことを願っています。

これらの明確な情報が Web 上のどこにも見つからないため、情報を提供していただければ幸いです。

Junit テスト フレームワークを使用して Android API をテストする場合、テスト形式ではなく UI 形式でテスト結果を取得できますか?

どうもありがとう。あなたの時間を感謝します。

よろしく、リヤス

0 投票する
2 に答える
854 参照

c - dladdr() で問題を引き起こすマクロ

-finstrument-functionsgcc のオプションとこの (簡略化された) コードを使用して、トレース動作を実装しました。

これはうまく機能しますが、1 つのことを除いては、マクロも処理されますが、関数はマクロを含む関数の情報を出力します。

そのため、マクロを含む関数では、その情報が複数回出力されます (これはもちろん望ましくありません)。

マクロが処理されていることを検出するものはありますか? または、計測マクロをまったくオフにすることは可能ですか?

PS同じ問題が発生しますsizeof()

編集:明確にするために:マクロがインストルメント化された機能をいじるのを防ぐための解決策を探しています(これはすべきではありません)。マクロ、関数、および/またはその他のものをトレースするメソッドではありません。

0 投票する
2 に答える
399 参照

c# - .NET に Java の ClassFileTransformer に相当するものはありますか? (クラスを置き換える方法)

私はこれまでのところ運がなく、かなり長い間これを探してきました。ClassFileTransformer.NETに Java に相当するものはありますか? 基本的に、クラスがロードされるたびに呼び出され、微調整して微調整されたバージョンに置き換えることができるクラスCustomClassFileTransformer(Java では interface を実装する)を作成したいと考えています。ClassFileTransformer

同様のことを行うフレームワークがあることは知っていますが、独自の を実装するなど、より簡単なものを探していましたClassFileTransformer。出来ますか?


編集#1。これが必要な理由の詳細:

Ldfld基本的に、私は C# アプリケーションを持っており、フィールド (操作およびStfld) に対する読み取りまたは書き込み操作を検出し、読み取り/書き込みが行われる前にいくつかの命令を挿入するために、実行する命令を監視する必要があります。

私はこれを行う方法を知っています (クラスを置き換えるために呼び出される必要がある部分を除く): コードを監視するすべてのメソッドに対して、次のことを行う必要があります。

  1. メソッドのMethodBody使用を取得するMethodBase.GetMethodBody()
  2. でバイト配列に変換しますMethodBody.GetILAsByteArray()。返されるbyte[]には、バイトコードが含まれています。
  3. hereの説明に従ってバイトコードを分析し、新しい命令を挿入するか、配列の内容を変更して既存の命令を削除/変更する可能性があります。
  4. 新しいメソッドを作成し、新しいバイトコードを使用してその本体を作成します。MethodBuilder.CreateMethodBody(byte[] il, int count)ここilで、 はバイトコードを含む配列です。これらの微調整されたメソッドをすべて新しいクラスに入れ、新しいクラスを使用して、最初にロードされる予定だったメソッドを置き換えます。

クラスを置き換える代わりに、メソッドが呼び出されるたびに何らかの方法で通知を受けることができます。次に、そのメソッドへの呼び出しを、独自の微調整したメソッドへの呼び出しに置き換えます。これは、最初に呼び出されたときにのみ微調整し、将来の使用のために辞書に入れ、オーバーヘッドを削減します (将来の呼び出しの場合)。メソッドを検索して呼び出すだけで、バイトコードを再度分析する必要はありません)。私は現在これを行う方法を調査しており、LinFuは非常に興味深いように見えますがClassFileTransformer、クラスを書き直して置き換え、何も監視せずにコードを実行するだけです。

追加の注意: クラスは封印される場合があります。あらゆる種類のクラスを置換できるようにしたいのですが、それらの属性に制限を課すことはできません。


編集#2。実行時にこれを行う必要がある理由。

データへのすべてのアクセスを検出できるように、進行中のすべてを監視する必要があります。これは、ライブラリ クラスのコードにも当てはまります。ただし、どのクラスが使用されるかを事前に知ることはできません。ロードされる可能性のあるすべてのクラスを知っていたとしても、それらが実際に呼び出されるかどうかを確認するのではなく、それらすべてを微調整するとパフォーマンスが大幅に低下します。いいえ。


可能な(しかしかなりハードコアな)解決策。誰かが興味を持っている場合に備えて(そして、質問がお気に入りになっているのを見たので、誰かがそうだと思います)、これが私が今見ているものです。基本的に、プロファイリング API を実装する必要があり、関心のあるイベント (私の場合は JIT コンパイルが開始されるたび) に登録します。ブログ投稿の抜粋:

  • ICorProfilerCallback2::ModuleLoadFinished コールバックで、ICorProfilerInfo2::GetModuleMetadata を呼び出して、そのモジュールのメタデータ インターフェイスへのポインターを取得します。
  • 必要なメタデータ インターフェイスの QI。MSDN で「IMetaDataImport」を検索し、目次を調べてメタデータ インターフェイスに関するトピックを見つけます。
  • メタデータの世界に入ると、フィールドや関数プロトタイプを含む、モジュール内のすべての型にアクセスできます。メタデータの署名を解析する必要がある場合は、この署名パーサーが役立つ場合があります。
  • ICorProfilerCallback2::JITCompilationStarted コールバックでは、ICorProfilerInfo2::GetILFunctionBody を使用して元の IL を調べ、ICorProfilerInfo2::GetILFunctionBodyAllocator を使用してから ICorProfilerInfo2::SetILFunctionBody を使用してその IL を独自のものに置き換えることができます。

すばらしいニュース: JIT コンパイルが開始されると通知が届き、クラスの置き換えなどを心配することなく、その場でバイトコードを置き換えることができます。あまりすばらしいニュースではありません: API のコールバック メソッドからマネージ コードを呼び出すことはできません。 、これは理にかなっていますが、Cecilを使用できるのとは対照的に、ILコードなどを自分で解析していることを意味します。

AOP フレームワーク ( PostSharpなど) を使用せずにこれを行う簡単な方法はないと思います。誰かが他のアイデアを持っている場合は、私に知らせてください。質問にまだ回答済みのマークを付けていません。

0 投票する
1 に答える
1840 参照

android - アンドロイド計装テストスイート

パッケージcom.app.myapp.testに2つのテストケースを記述しました。それらを実行しようとすると、両方が実行されず、1つのテストケースのみが実行されて停止します。

同じパッケージに次のテストスイートを書きました

AllTests.java

このテストスイートのコードと場所は正しいですか?

0 投票する
4 に答える
8925 参照

android - Android の Instrumentation を使用した GUI テスト

キーイベントや押されたボタンなどを使用して、Android アプリケーションの UI をテストしたいと考えています。インストルメンテーションがこの目的で使用できるいくつかのドキュメントを読みました。

UI テストにインストルメンテーションを使用した経験のある人はいますか?

0 投票する
6 に答える
9467 参照

visual-studio-2010 - 署名されたアセンブリをVS2010またはVS2013でプロファイリングするにはどうすればよいですか

AjaxControlToolkit.dllとLog4Net.dllを使用するWebサイトがあります。

VS 2010でパフォーマンスプロファイリングツールを実行しようとすると、次の警告が表示されます。

AjaxControlToolkit.dllは署名されており、インストルメントするとその署名が無効になります。インストルメント後のイベントなしで続行してバイナリに再署名すると、正しくロードされない場合があります。

ここで、再署名せずに続行するオプションを選択すると、プロファイリングは開始されますが、アセンブリが読み込まれず、ASP.NET例外が発生します。

0 投票する
2 に答える
1291 参照

java - java.lang.instrument はどの程度成熟していますか?

私は、比較的複雑な Java アプリケーションをインストルメント化するプロジェクトに取り組んでおり、java.lang.instrument を使用して JVM にフックし、ロードする前にクラスを再定義する予定です。

このパッケージについてどう思いますか? JVM 間で適切にサポートされていますか? ホットスポットでうまく動作しますか?

ありがとう!

0 投票する
2 に答える
316 参照

java - バイトコードとオブジェクト

私はバイトコード計測プロジェクトに取り組んでいます。現在、オブジェクトを処理するとき、ベリファイアはほとんどの場合エラーをスローします。したがって、オブジェクトを使用したルールに関することを明確にしたいと思います(JVMを読みましたが、探していた答えが見つかりませんでした)。

私は新しい命令を計測しています:

元のバイトコード

計装後

プロファイル参照(新しく作成されたオブジェクト)を引数として取るProfiler.handleNEW()への呼び出しを追加したことに注意してください。

上記のコードの一部は、VerificationErrorをスローします。INVOKESTATIC(DUPのみを残す)を追加しない場合は追加されません。それで、私が違反している規則は何ですか?初期化されていない参照を複製することはできますが、パラメーターとして渡すことはできませんか?助けていただければ幸いです。ありがとうございました

0 投票する
1 に答える
61 参照

.net - 文字列の計測

C++ 時代のどこかで、計算履歴の文字列表現を可能にするライブラリを作成しました。次のような数式を使用します。

文字列表現をレンダリングできます:

C++ 演算子のオーバーロードにより、オブジェクトで発生するすべての内部ツリー表現を使用して、単純な型を複雑な自己追跡エンティティに置き換えることができました。

ここで、変数名の代わりに、文字列に影響を与えたコード内のすべての場所のスタック トレースを確認したいと考えています。

そして、既存のコードと既存のコンパイル済みアセンブリで動作するようにします。

また、これらすべてを Visual Studio デバッガーにフックして、ブレークポイントを設定し、文字列で発生したすべてを確認できるようにします。

この種のことを可能にするテクノロジーはどれですか?

ユートピアのように聞こえるかもしれませんが、ビジュアル スタジオのコード カバレッジ ツールは、アセンブリをインストルメント化する際に実際に同じような仕事をしていると思います。

0 投票する
1 に答える
1314 参照

c# - Visual Studio 2010 Professional - 問題の単体テスト Web サービス

Visual Studio 2010 Professional で非常に単純な Web サービス (asmx) を作成し、自動生成された単体テスト ケースを使用しようとしています。このサイトでかなりおなじみのように見えるものを取得します。

Web サイトを正しく構成できませんでした。ASP.NET プロセス情報の取得に失敗しました。http://localhost:81/zfp/VSEnterpriseHelper.axdにエラーを返すように要求しています: リモート サーバーがエラーを返しました: (500) 内部サーバー エラー。

Visual Studio ASP.NET 単体テストの実行中に 500 エラーが発生しました

1. ASP.NET
開発サーバーではなく IIS でテストを実行する
2. Web サービスの .config ファイルに XML フラグメントを追加してから削除する
3. MACHINE\ASPNET アカウントにローカル フォルダーへのフル コントロールを付与する

現在の質問:
1. Visual Studio 2010 Professional に同梱されていないように見えるのに、このインストルメンテーション/コード カバレッジ DLL に悩まされているのはなぜですか? オフにする方法はありますか?
2. ノードを Web.config の下に配置しています - それは正しいノードですか?
3. webby テスト属性を使用せずに Web サービスにバインドすることは可能ですか?

Web サービスをできるだけ軽量にするようアドバイスする人もいます。jQuery/AJAX/JSONで呼び出そうとしているので、実際のWebサービスをデバッグできると大変助かります。

幸運をお祈りしています、

ベン