使用“include”过滤模式捕捉指定模块的内存访问错误

Intel® Inspector XE 2011 能够报告进程运行中所有的内存访问错误。可是,当用户运行一个比较大的程序,其中包含系统的库函数,开发工具的库函数,第三方的库函数。有时分析结果会报出一大堆的错误,反而和用户代码相关的错误会淹没在其中,不易被发现。

 例如:
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
有关编译器优化的更完整信息,请参阅优化通知
类别: