无论是否收集了静态数据,您都可以编译、检测和运行应用程序来收集动态内存访问数据。有关通过使用 discover 检测应用程序然后运行应用程序找到的动态内存访问错误的列表,请参见动态内存访问问题。
在 sample 目录中,使用 –g 选项生成样例应用程序。
此选项可生成调试信息,从而使代码分析器可以显示错误和警告的源代码和行号信息。
在 Oracle Solaris 上:
$ cc -g main.c previse*.c sample1.c sample2.c sample3.c
在 Oracle Linux 上:
$ cc -xannotate -g main.c previse*.c sample1.c sample2.c sample3.c
请保存该二进制文件的副本以供收集覆盖数据时使用,因为无法检测已经检测的二进制文件。
$ cp a.out a.out.save
使用 discover 检测二进制文件。
$ discover -a a.out
运行检测过的二进制文件以收集动态内存访问数据。
$ ./a.out
动态内存访问错误数据将写入 sample/a.out.analyze/dynamic 目录。
启动代码分析器 GUI 以查看结果。
$ code-analyzer a.out &
"Results"(结果)标签同时显示静态问题和动态内存问题。问题描述的背景颜色可以指明问题是静态代码问题(棕褐色)还是动态内存访问问题(淡绿色)。
要过滤结果以便仅显示动态内存问题,请在 "Issues"(问题)标签中选中 "Dynamic"(动态)选项。
现在,"Results"(结果)标签仅显示三个核心动态内存问题。
要查看所有动态内存问题,请选择 "Issues"(问题)标签顶部的 "All"(所有)单选按钮。现在,"Results"(结果)标签显示六个动态内存问题。
查看已添加到显示屏幕中的三个问题,并了解它们如何与核心问题相关联。在基于相应成因修复显示屏幕中的第一个问题后,可能还会消除第二个和第三个问题。
要在调查第一个问题的成因时隐藏其他动态内存访问问题,请单击每个问题对应的 "Ignore"(忽略)按钮 。
通过单击错误图标以显示堆栈跟踪来调查第一个问题。
对于此问题,堆栈跟踪包括 "Call Stack"(调用堆栈)和 "Allocated At Stack"(堆栈上的已分配空间)。
双击堆栈中的函数调用以查看源文件中的关联行。
打开源文件时,堆栈跟踪显示在该文件下的 "Details Window"(详细信息窗口)中。
按右上角的 X 关闭代码分析器 GUI。