コールグラフの生成

C/C++ SDKを使用して、コールグラフでレポートおよび表示されるようにメソッドをインストゥルメント化できます。次のいずれかの方法でメソッドをインストルメント化できます。

  • APPD_AUTO_FRAME マクロ、C++ のみを使用
  • appd_frame_beginappd_frame_end を使用

マクロを使用したメソッドのインストゥルメント化

APPD_AUTO_FRAME マクロを使用して、C++ フレームワークでビルドされたアプリケーションをインストルメント化できます。このマクロの機能は、appd_frame_begin および appd_frame_end メソッドの呼び出しと同じです。

  1. コールをインストルメント化するビジネストランザクションを指定し、コールグラフのルートを構成します。

    appd::sdk::BT bt("mybt");
    APPD_AUTO_FRAME(bt);
    method1(bt);
    method2(bt);
  2. 下記のとおりにメソッドをインストゥルメント化します。

    void method1(appd::sdk::BT& bt)
    {
    APPD_AUTO_FRAME(bt);
    // Code for method1...
    }
    void method2(appd::sdk::BT& bt)
    {
    APPD_AUTO_FRAME(bt);
    // Code for method2...
    }

    メソッドにはビジネストランザクションへのアクセス権が必要であるため、ビジネストランザクションを引数としてメソッドに渡すことができます。

および 関数を使用したメソッドのインストゥルメント化

C++以外のフレームワークでビルドされたアプリケーションのメソッドをインストゥルメント化できます。メソッドをインストゥルメント化するには、メソッドの開始時に appd_frame_begin を呼び出し、メソッドの終了時に appd_frame_end を呼び出します。これを実行すると、メソッド呼び出しの期間が自動的に計算され、コールグラフでレポートされます。

メソッドで終了コールが行われると、appd_exitcall_beginappd_exitcall_end の間に終了コールコードを追加して終了コールをインストゥルメント化できます。

以下のコードのサンプルは、appd_frame_begin および appd_frame_end を使用してそれぞれインストゥルメント化され、ルートメソッド main() で呼び出される 3 つのメソッドを示しています。2 つ目のメソッドのサンプル method2() には、終了コールが含まれています。

void method1( )
{
appd_frame_handle frameHandle = appd_frame_begin(btHandle, APPD_FRAME_TYPE_CPP, nullptr, APPD_FUNCTION_NAME, __FILE__, __LINE__);
// code for method1
appd_frame_end(btHandle, frameHandle);
}
void method2()
{
appd_frame_handle frameHandle = appd_frame_begin(btHandle, APPD_FRAME_TYPE_CPP, nullptr, APPD_FUNCTION_NAME, __FILE__, __LINE__);
// code for method2
appd_exitcall_handle exitCallHandle = appd_exitcall_begin(btHandle, BACKEND_NAME);
// code for exit call
appd_exitcall_end(exitCallHandle);
appd_frame_end(btHandle, frameHandle);
}
void method3()
{
// To illustrate instrumenting a method where this SDK cannot be used
// method3 is a wrapper for the call of the actual method which will show up in the call graph
appd_frame_handle frameHandle = appd_frame_begin(btHandle, APPD_FRAME_TYPE_CPP, "Test", "Compute", "C:\\modules\\source\\Test.cs", 143);
// call the wrapped method
appd_frame_end(btHandle, frameHandle);
}

main()次の メソッドは、コールグラフのルートです。ここには、トランザクションを appd_bt_begin および appd_bt_end に渡すことで上記 3 つのメソッドを呼び出すビジネストランザクションが指定されます。

int main(int argc, char **argv)
{
// initialize AppDynamics
btHandle = appd_bt_begin(TRANSACTION_NAME, "");
appd_frame_handle frameHandle = appd_frame_begin(btHandle, APPD_FRAME_TYPE_CPP, nullptr, APPD_FUNCTION_NAME, __FILE__, __LINE__);
// code for main
method1();
method2();
method3();
appd_frame_end(btHandle, frameHandle);
appd_bt_end(btHandle);
}

上記のメソッドのサンプルは、下記のコールグラフで表されています。

コールグラフのメソッド