-qfunctrace
适用的调用
| 选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
|---|---|---|---|---|
| -qfunctrace | ✓ | ✓ | ✓ | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
等效编译指示
无。
用途
调用跟踪例程以跟踪编译单元中指定函数的入口点和出口点。
语法
缺省值
-qnofunctrace
注: 为 C++ 程序指定 -qfunctrace 时,缺省情况下不会跟踪 std 名称空间中的函数。
参数
- +
- 指示编译器跟踪 function_name, classes或 namespace, 及其所有内部 函数。
- -
- 指示编译器不跟踪 function_name, classes或 namespace, 或其任何内部函数。
- function_name
- 指示要跟踪的指定函数。
- 类名
- 指示要跟踪的指定类。
- 名称空间
- 指示要跟踪的名称空间。
使用量
-qfunctrace 对程序中的所有 函数 启用跟踪。 -qnofunctrace 禁用由 -qfunctrace启用的跟踪。
-qfunctrace+ 和 -qfunctrace- 子选项对特定 函数 列表启用跟踪,并且不受 -qnofunctrace影响。 函数 的列表是累积的。
此选项将插入对已定义的跟踪 函数 的调用。 必须在链接步骤中提供这些 函数 。 有关跟踪函数接口及其调用时间的详细信息,请参阅 XL C/C++ 优化和编程指南》 中的 “代码中的跟踪函数” 部分。
使用 + 或 - 来指示要由编译器跟踪的函数 ,类名或名称空间 。 例如,如果要跟踪函数 x,请使用 -qfunctrace+x。 要跟踪函数列表,必须使用冒号 : 来分隔这些函数。
行 :: 中的两个冒号是作用域限定符,您可以使用它来指示 C++ 限定名。 例如,使用以限定符 A::B 或 C开头的 -qfunctrace+A::B:C 跟踪函数。
如果要跟踪代码中的函数,那么 必须 使用以下 C 函数原型在代码中编写跟踪函数:
- 使用
void __func_trace_enter(const char *const function_name, const char *const file_name, int line_number, void **const user_data);来定义入口点跟踪例程。 - 使用
void __func_trace_exit(const char *const function_name, const char *const file_name, int line_number, void **const user_data);来定义出口点跟踪例程。 - 使用
void __func_trace_catch(const char *const function_name, const char *const file_name, int line_number, void **const user_data);来定义捕获跟踪例程。
在代码中编写前面的函数原型时,必须定义函数。
有关这些函数原型的详细信息以及何时调用它们,请参阅 《 XL C/C++ 优化和编程指南》 中的“代码中的跟踪函数”部分。
备注信息:
- 一次只能使用 + 和 - 一个。 请勿在同一 -qfunctrace 调用中同时使用这两个参数。
- 跟踪内联函数的定义。 如果呼叫已直接插入,那么不会对其进行跟踪; 如果呼叫未直接插入,那么会对其进行跟踪。
预定义的宏
无。
示例
要跟踪函数 x, y和 z,请使用 -qfunctrace+x:y:z。
要跟踪除 x以外的所有函数,请使用 -qfunctrace -qfunctrace-x。
-qfunctrace+ 和 -qfunctrace- 子选项仅在给定的累积函数列表上启用或禁用跟踪。 使用函数,类和名称空间 时,最完整的指定选项将生效。 以下是示例列表:
-qfunctrace+x -qfunctrace+y或-qfunctrace+x -qnofunctrace -qfunctrace+y仅对x和y启用跟踪。-qfunctrace-x -qfunctrace或-qfunctrace -qfunctrace-x跟踪编译单元中的所有函数 (x除外)。-qfunctrace -qfunctrace+x跟踪所有函数。- 仅
-qfunctrace+y -qnofunctrace跟踪y。 - 如果
functionX是classX的成员函数,那么-qfunctrace-classX::functionX -qfunctrace+classX或-qfunctrace+classX -qfunctrace-classX::functionX将跟踪classX的所有成员函数,但不会跟踪functionX。 这是因为classX::functionX比classX更完整地指定。 更完整的指定选项优先于不完整的指定选项。 -qfunctrace+MyClass跟踪MyClass中的所有成员函数。-qfunctrace+std::vector跟踪std::vector的所有实例化。-qfunctrace+ABC -qfunctrace-ABC::foo跟踪名称空间ABC中定义的所有函数 (foo除外)。
相关信息
如果您调用基于XL的前端 XL C/C++ ,并使用传统调用方式(如 xlc++ ),则可以使用 #pragma nofunctrace。 有关更多信息,请参阅 #pragma nofunctrace。- 有关如何在代码中实现函数跟踪例程的详细信息,以及详细的示例和使用规则列表,请参阅代码中的函数跟踪。
