如何获取 WinDBG 预览 TTD 跟踪会话的可用虚拟内存区域?
How to get available virtual memory regions for WinDBG preview TTD trace session?
我正在编写 dbgeng 客户端并尝试为时间旅行调试会话枚举可用的虚拟内存。
Dbgeng API 有 IDebugDataSpaces2::QueryVirtual
方法,它非常适合实时用户模式调试会话,但不适用于 TTD 跟踪会话重放。
当我尝试调用它时,我收到 0x8000ffff (E_UNEXPECTED) 错误。
看起来来自 windbg 预览 gui 的 !address
和 !vprot
命令有同样的问题
0:000> !vprot 0
ERROR: !vprot: extension exception 0x8000ffff.
"QueryVirtual failed"
0:000> !address
BaseAddress EndAddress+1 RegionSize Type State Protect Usage
--------------------------------------------------------------------------------------------------------------------------
有IDebugDataSpaces4::GetValidRegionVirtual
方法。它有效,但太长了(看起来它试图手动检查每一页)。看起来 IDebugDataSpaces4::GetNextDifferentlyValidOffsetVirtual
对于 TTD 重放也有问题。
dbgeng API 是否有其他方法来枚举进程的有效内存范围?
或者也许还有另一种方法可以从 IDX 或 运行 文件中获取此信息?
目前一些在实时调试和转储文件中可用的信息在 TTD 中不可用。两个主要特征是:a) QueryVirtual 不起作用; b) 不保存进程和线程安全令牌信息。
我在我的 Debug 扩展中大量使用了 QueryVirtual 并且我做了一些改变来处理它。很抱歉成为坏消息的传递者。
我正在编写 dbgeng 客户端并尝试为时间旅行调试会话枚举可用的虚拟内存。
Dbgeng API 有 IDebugDataSpaces2::QueryVirtual
方法,它非常适合实时用户模式调试会话,但不适用于 TTD 跟踪会话重放。
当我尝试调用它时,我收到 0x8000ffff (E_UNEXPECTED) 错误。
看起来来自 windbg 预览 gui 的 !address
和 !vprot
命令有同样的问题
0:000> !vprot 0
ERROR: !vprot: extension exception 0x8000ffff.
"QueryVirtual failed"
0:000> !address
BaseAddress EndAddress+1 RegionSize Type State Protect Usage
--------------------------------------------------------------------------------------------------------------------------
有IDebugDataSpaces4::GetValidRegionVirtual
方法。它有效,但太长了(看起来它试图手动检查每一页)。看起来 IDebugDataSpaces4::GetNextDifferentlyValidOffsetVirtual
对于 TTD 重放也有问题。
dbgeng API 是否有其他方法来枚举进程的有效内存范围? 或者也许还有另一种方法可以从 IDX 或 运行 文件中获取此信息?
目前一些在实时调试和转储文件中可用的信息在 TTD 中不可用。两个主要特征是:a) QueryVirtual 不起作用; b) 不保存进程和线程安全令牌信息。 我在我的 Debug 扩展中大量使用了 QueryVirtual 并且我做了一些改变来处理它。很抱歉成为坏消息的传递者。