我需要从任何 PDB(所有输入/输出参数及其类型)中获取函数的堆栈帧。我有来自 PDB 的某个函数的函数名称和地址,有没有办法从 PDB 文件中获取该函数的所有参数(输入/输出)?
这些函数是用非托管代码编写的。
问候,
乌斯曼
我需要从任何 PDB(所有输入/输出参数及其类型)中获取函数的堆栈帧。我有来自 PDB 的某个函数的函数名称和地址,有没有办法从 PDB 文件中获取该函数的所有参数(输入/输出)?
这些函数是用非托管代码编写的。
问候,
乌斯曼
你有一堆概念。PDB 与任何其他文件一样不包含堆栈或堆栈帧,因为它是在执行期间创建的。.net exe/dll 包含类的元数据,因此您可以查看方法签名。您可以在代码中获取堆栈帧(google class StackFrame
/ StackFrame
),但您仍然不能像参数值一样从堆栈中获取所有数据。
要从转储中提取函数名称、地址和参数类型,您可以使用 dia2dump 程序。它作为调试接口访问 SDK (dia-sdk) 的示例提供。您可以在 Visual 2008 或 2010 下找到它C:\Program Files\Microsoft Visual Studio (your version)\DIA SDK\Samples\DIA2Dump
在编译时无法获取堆栈帧。堆栈是一个运行时概念。