如果您怀疑实验中缺少某些跟踪数据(同步等待跟踪数据、堆跟踪数据或 MPI 跟踪数据),请检查下面的列表,其中的主题解释了缺少数据的原因。
如果将 dbx 附加到正在运行的程序,则无法收集跟踪数据,除非您在运行程序时预先载入收集器库。跟踪数据是通过对待跟踪函数进行插入操作而收集的。如果在要跟踪的函数之后载入收集器库,则插入不会成功。
要预先载入收集器库,请将环境变量 LD_PRELOAD 设置为 libcollector.so,并将环境变量 LD_LIBRARY_PATH 设置为 /opt/SUNWspro/lib,或设置为系统中的等价路径。如果当前使用的是 SPARC-V9 64 位体系结构,则必须还要将环境变量 LD_LIBRARY_PATH_64 设置为 /opt/SUNWspro/lib/v9。如果已经定义了这些环境变量,则应添加这些环境变量而不是重新定义它们。当您完成收集数据后,从这些环境变量中删除收集器库设置。
如果您的程序成功调用 exec(2) 或其任一变体,则性能实验将被异常终止,并且不再记录数据。如果调用失败,则数据收集照常进行。如果在 dbx 下运行此程序,则在成功调用 exec 之后不能收集数据,但是如果您使用 collect(1) 命令收集数据,则可以使用 -F on 选项记录新图像上的实验。
异常终止的实验可由性能分析器成功读取。如果要在记录实验时所在计算机以外的一台不同计算机上分析此实验,请首先在记录该实验的计算机上使用 er_archive(1) 命令。
跟踪数据是通过在实际系统库函数和调用库函数的应用程序之间插入包装器函数而记录的。对包装器函数的引用在运行时进行解析,并要求动态载入库。如果静态链接任一系统库,则对这些例程的引用已在可执行文件中解析,并且无法在运行时解析。因此,收集器无法插入其包装器函数,所以也就无法在函数调用时收集数据。