Debugging Tools for Windows |
.step_filter 命令创建一个在跟踪时要跳过(步过)的函数列表。这使得可以跟踪代码并且只跳过特定的函数。也可以在源码模式下一行中有多个函数调用时用来对单步进行控制。
.step_filter /c
.step_filter
模式 | 用户模式、内核模式 |
目标 | 活动目标、崩溃转储 |
平台 | 所有 |
不带参数时,.step_filter 显示当前的过滤列表。
一般来说,一个跟踪命令 (例如t或者WinDbg的Debug | Step Into按钮) 将会跟踪进入函数调用中。但是,如果被调用函数关联的符号能够匹配FilterList 中的模板,则该函数会被步过 — 就像使用单步命令一样 (例如p) 。
如果指令指针在过滤列表中列出的代码里面,任何跟踪或单步命令都会执行到函数返回,就像gu命令或者WinDbg 的Step Out 按钮一样。当然,过滤器首先就会避免跟踪到这些代码中,所以这种情况只会在改变了过滤器或者遇到断点时发生。
例如,下面的命令使得跟踪命令跳过所有的CRT调用:
.step_filter 命令在源码模式调试时最有用,因为单行源码上可以有多个函数调用。p 和 t 命令没有办法区分这些函数调用。
例如,下面一行中, t 命令将会单步进入GetTickCount 和printf,而p命令会同时步过两个函数调用:
.step_filter 命令允许忽略某个调用但是跟踪到另一个中。
由于函数是由符号来标识的,所以单个过滤器就可以包含整个模块。这使得可以过滤掉所有的框架函数 — 例如,微软基本类库(MFC) 或活动模板库(ATL) 的调用。
在汇编模式下调试时,每个调用都在单独的行上,所以可以选择是单步还是一行一行的跟踪。所以汇编模式下.step_filter不是非常有用。