-qfunctrace

适用的调用

表 1. 接受给定选项的调用
选项 xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
-qfunctrace
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

错误检查和调试

等效编译指示

无。

用途

调用跟踪例程以跟踪编译单元中指定函数的入口点和出口点。

语法

读取语法图跳过可视语法图-qnofunctrace-qfunctrace +  - :功能名称类名名称空间

缺省值

-qnofunctrace

注: 为 C++ 程序指定 -qfunctrace 时,缺省情况下不会跟踪 std 名称空间中的函数。

参数

+
指示编译器跟踪 function_nameclassesnamespace 及其所有内部 函数。
-
指示编译器不跟踪 function_nameclassesnamespace 或其任何内部函数。
function_name
指示要跟踪的指定函数。
类名
指示要跟踪的指定类。
名称空间
指示要跟踪的名称空间。

使用量

-qfunctrace 对程序中的所有 函数 启用跟踪。 -qnofunctrace 禁用由 -qfunctrace启用的跟踪。

-qfunctrace+-qfunctrace- 子选项对特定 函数 列表启用跟踪,并且不受 -qnofunctrace影响。 函数 的列表是累积的。

此选项将插入对已定义的跟踪 函数 的调用。 必须在链接步骤中提供这些 函数 。 有关跟踪函数接口及其调用时间的详细信息,请参阅 XL C/C++ 优化和编程指南》 中的 “代码中的跟踪函数” 部分。

使用 +- 来指示要由编译器跟踪的函数 ,类名或名称空间 。 例如,如果要跟踪函数 x,请使用 -qfunctrace+x。 要跟踪函数列表,必须使用冒号 : 来分隔这些函数。

:: 中的两个冒号是作用域限定符,您可以使用它来指示 C++ 限定名。 例如,使用以限定符 A::BC开头的 -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 调用中同时使用这两个参数。
  • 跟踪内联函数的定义。 如果呼叫已直接插入,那么不会对其进行跟踪; 如果呼叫未直接插入,那么会对其进行跟踪。

预定义的宏

无。

示例

要跟踪函数 xyz,请使用 -qfunctrace+x:y:z

要跟踪除 x以外的所有函数,请使用 -qfunctrace -qfunctrace-x

-qfunctrace+-qfunctrace- 子选项仅在给定的累积函数列表上启用或禁用跟踪。 使用函数,类和名称空间 时,最完整的指定选项将生效。 以下是示例列表:
  • -qfunctrace+x -qfunctrace+y-qfunctrace+x -qnofunctrace -qfunctrace+y 仅对 xy启用跟踪。
  • -qfunctrace-x -qfunctrace-qfunctrace -qfunctrace-x 跟踪编译单元中的所有函数 ( x除外)。
  • -qfunctrace -qfunctrace+x 跟踪所有函数。
  • -qfunctrace+y -qnofunctrace 跟踪 y
  • 如果 functionXclassX的成员函数,那么 -qfunctrace-classX::functionX -qfunctrace+classX-qfunctrace+classX -qfunctrace-classX::functionX 将跟踪 classX 的所有成员函数,但不会跟踪 functionX。 这是因为 classX::functionXclassX更完整地指定。 更完整的指定选项优先于不完整的指定选项。
  • -qfunctrace+MyClass 跟踪 MyClass中的所有成员函数。
  • -qfunctrace+std::vector 跟踪 std::vector的所有实例化。
  • -qfunctrace+ABC -qfunctrace-ABC::foo 跟踪名称空间 ABC 中定义的所有函数 ( foo除外)。

相关信息

  • 基于 XL 的前端开始如果您调用基于XL的前端 XL C/C++ ,并使用传统调用方式(如 xlc++ ),则可以使用 #pragma nofunctrace。 有关更多信息,请参阅 #pragma nofunctrace
  • 有关如何在代码中实现函数跟踪例程的详细信息,以及详细的示例和使用规则列表,请参阅代码中的函数跟踪