VS Studio Debugger - 获取(并观察)所有类型的实例

时间:2015-09-23 14:16:34

标签: c++ visual-studio visual-studio-debugging

对于给定的堆栈帧,是否有一种快速的方法(或一种简单的方法来构造一种方法)来获取给定堆栈帧(堆栈和堆变量)的某个类/类型的所有实例?我想在没有任何源代码更改的情况下执行此操作 - 其他功能仅来自VS / VS-Debugger。

我在设想对大型代码库中使用的数据类型进行更改时,这种行为非常有用。

1 个答案:

答案 0 :(得分:1)

堆管理器

从C ++运行时的角度来看,堆管理器通过HeapAlloc (MSDN)分配字节。签名是

LPVOID WINAPI HeapAlloc(
  _In_ HANDLE hHeap,
  _In_ DWORD  dwFlags,
  _In_ SIZE_T dwBytes
);

因此,如果堆管理器分配内存,它会分配一些字节,而不是类型的内存。

一个有用的东西(不适用于Visual Studio),至少对于堆上的对象来说,是启用GFlags的“用户模式堆栈跟踪数据库”。启用后,它会跟踪堆上的分配并将其与堆栈相关联。这样,你仍然看不到类型信息,但至少要找出分配内存的方法。在小方法中,您可以从 dwBytes 信息中找到它的类型 - 但仍然必须手动完成。

调试堆管理器

如果您有调试版本,可以使用Debug Heap Manager来帮助您跟踪分配。

然而,这并非完全没有源代码更改。您需要导入调试头。

Visual Studio 2013 Update 2

从Visual Studio 2013 Update 2开始,有一个memory diagnostic tool,它甚至允许您跟踪丢失的对象类型。

它通过分析PDB来实现,并且对于PDB不可用的库而言它失败了。

Screenshot http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/6813.8.png