Intel® Inspector XE 2011 能够报告进程运行中所有的内存访问错误。可是,当用户运行一个比较大的程序,其中包含系统的库函数,开发工具的库函数,第三方的库函数。有时分析结果会报出一大堆的错误,反而和用户代码相关的错误会淹没在其中,不易被发现。
例如:
其实错误并不出现在用户的代码中,而在mainCRTstartup() 的线程初始化,来源于kenel32.dll。以下是调用栈信息。
此种错误一般被侦测在进程的退出过程中。其实进程结束后,系统会自动回收占用的内存,用户不必担心。
分析时可以设立模块过滤,仅仅关注于指定模块
例如:
inspxe-cl -collect mi1 -foo.exe
Used suppression file(s): []
3 new problem(s) found
3 Memory leak problem(s) detected
Inspxe-cl –report problems
Problem P1: Error: Memory leak
malloc.c(54): Error X1: P1: Memory leak: Allocation site: Function _heap_alloc_base: Module foo.exe
Problem P2: Error: Memory leak
malloc.c(54): Error X2: P2: Memory leak: Allocation site: Function _heap_alloc_base: Module foo.exe
Problem P3: Error: Memory leak
malloc.c(54): Error X3: P3: Memory leak: Allocation site: Function _heap_alloc_base: Module foo.exe
其实错误并不出现在用户的代码中,而在mainCRTstartup() 的线程初始化,来源于kenel32.dll。以下是调用栈信息。
foo.exe!_heap_alloc_base - malloc.c:54
foo.exe!heap_alloc_dbg_impl - dbgheap.c:431
foo.exe!nh_malloc_dbg_impl - dbgheap.c:239
foo.exe!_calloc_dbg_impl - dbgheap.c:601
foo.exe!_calloc_dbg - dbgheap.c:652
foo.exe!_setenvp - stdenvp.c:117
foo.exe!_tmainCRTStartup - crt0.c:259
foo.exe!mainCRTStartup - crt0.c:188
kernel32.dll!BaseThreadInitThunk - kernel32.dll:79477
此种错误一般被侦测在进程的退出过程中。其实进程结束后,系统会自动回收占用的内存,用户不必担心。
分析时可以设立模块过滤,仅仅关注于指定模块
inspxe-cl -collect mi1 -module-filter-mode=include -module-filter=.\foo.exe -- foo.exe
Used suppression file(s): []
0 new problem(s) found
