3

我正在分析一些用户模式内存转储以尝试追踪泄漏,并且我有一些关于泄漏的候选者,但是当我运行 !heap -flt s xx 命令时,我一直在我的转储中看到这些条目.

    14a8bd58 0006 0006  [07]   14a8bd60    00018 - (busy)
    14a8bd88 0006 0006  [07]   14a8bd90    00018 - (busy)
    14a8bdf8 0006 0006  [07]   14a8be00    00018 - (busy)
    14a8bf48 0006 0006  [07]   14a8bf50    00018 - (busy)
      ? SomeModule!SomeFunction+1bdf4

我明白了什么

    14a8bd58 0006 0006  [07]   14a8bd60    00018 - (busy)

线条是,但我不太确定线条是什么

      ? SomeModule!SomeFunction+1bdf4

真正的意义。这些转储是使用 +ust 标志捕获的,用于堆跟踪。

4

2 回答 2

4

它们只是提供符号信息,以便读者更有效地定位源的相应部分。

在 Windows 下,进程的虚拟地址空间由一组模块填充。每个模块由一个基地址和一个大小组成。因此,有时显示此信息的另一种方式是Module + Relative Offset

一个模块可以包含函数。在符号表完整的情况下,可以找到这些函数的相对偏移量(进入模块)和大小。转储只是以更易于阅读的格式显示此信息。

于 2012-04-23T14:53:48.980 回答
3

SomeModule是可执行模块的名称。

SomeFunction是从正在执行的模块导出的函数的名称。

+1bdf4是从该函数开头的偏移量,以十六进制表示。

此示例中的偏移量值非常大,这可能意味着模块的符号表丢失,并且偏移量显示为相对于具有已知名称的最接近的函数,通常是导出的函数。

于 2012-04-23T14:59:05.797 回答