シンボリック定数
Vueは、AIX®プログラミングで一般的に使用される、いくつかの定義済み記号定数をサポートしています。 これらの定数は、 Vueではキーワードとして扱われます。 コンパイル時に、これらの定数はシステムのヘッダー・ファイルでその定義に置き換えられます。 プローブ・マネージャー固有のシンボリック定数は、それぞれのセクションで説明されています。 一般的なシンボリック定数は次のとおりです。
- AF_INET
- タイプ IPv4 のアドレス・ファミリーを指定します。 これにより、確実に IPv4 タイプのデータを使用できます。
- AF_INET6
- タイプ IPv6 のアドレス・ファミリーを指定します。 これにより、確実に IPV6 タイプのデータを使用できます。
- ヌル
- ポインター型を NULL またはゼロ値に設定します。 NULL を使用して、文字列変数を空文字列に設定することはできません。
- エラー番号または「errno」名
- EPERM、EAGAIN、ESRCH、または ENOENT などの標準のエラー名です。これらは POSIX および ANSI 規格で定められ、/usr/include/sys/errno.h ヘッダー・ファイルに定義されています。
次のスクリプトでは、bind システム・コールが EADDRINUSE (既に使用中のアドレス) に設定された errno で失敗したときをトレースします。
/* * File: bind.e */ /* * Okay to use void for parameters since we are not planning to * access them in this script. */ int bind(void); @@syscall:*:bind:exit when (__rv == -1) { /* * The following check could also be moved to the predicate, * although it may not buy a lot because we are already in an * error path that should be executed only rarely */ if (__errno == EADDRINUSE) /* This check could also be moved to the predicate */ printf("%d failed with EADDRINUSE for bind() call.\n", __pid); } - シグナル名
- SIGSEGV、SIGHUP、SIGILL、または SIGABRT などの標準のシグナル名です。これらは ANSI 規格で定められ、/usr/include/sys/signal.h ヘッダー・ファイルに定義されています。
次のスクリプトでは、「誰」が特定のシグナルを送って特定のプロセスを終了したかをデバッグする方法を示します。
/* * File: signal.e * * Who sent SIGKILL to my process ? */ /* Process IDs are < 2^32, so using an 'int' here instead of pid_t is * good enough */ int kill(int pid, int signo); @@syscall:*:kill:entry when (__arg1 == $1 && __arg2 == SIGKILL) { /* Trace sender of SIGKILL */ printf("Stack trace of %s: (PID = %d)\n", __pname, __pid); stktrace(PRINT_SYMBOLS|GET_USER_TRACE, -1); exit(); } - FUNCTION_ENTRY
- プローブ・ポイントが関数エントリー・ポイントであるかを識別します。 get_location_point 関数と一緒に使用されます。
- FUNCTION_EXIT
- プローブ・ポイントが関数終了ポイントであるかを識別します。 get_location_point 関数と一緒に使用されます。