我可以在 WinDbg 中禁用 "Unable to read dynamic function table entry" 消息吗?

Can I disable the "Unable to read dynamic function table entry" message in WinDbg?

我正在使用一个在运行时生成大量代码的程序,并且似乎不会为其生成任何展开数据。 (我没有这个程序的源代码;我正在为它写一个插件。)

当程序挂起时,我使用 WinDbg 进入程序,并尝试使用 ~* k 获取所有线程的堆栈跟踪。除了堆栈跟踪之外,我还沿着

行获取了页面和页面(以及页面等)消息
Unable to read dynamic function table entry at 00000000`2450b580

这需要很长时间才能打印 - 超过一分钟 - 并且它会溢出滚动缓冲区,所以我丢失了大部分输出。

我现在已经通过对包含此消息的 DLL 进行十六进制编辑来解决这个问题,但是……说真的。是否有官方的方法来删除此消息?

我已经准备好接受来自问题线程的糟糕堆栈跟踪。

如果你是 运行 最新版本的 windbg

您可以尝试设置引擎初始化设置

0:000> dx Debugger.Settings.EngineInitialization.VerifyFunctionTableCallbacks
Debugger.Settings.EngineInitialization.VerifyFunctionTableCallbacks                 : true
0:000> dx Debugger.Settings.EngineInitialization.VerifyFunctionTableCallbacks = false
Debugger.Settings.EngineInitialization.VerifyFunctionTableCallbacks = false : false
0:000> dx Debugger.Settings.EngineInitialization.VerifyFunctionTableCallbacks
Debugger.Settings.EngineInitialization.VerifyFunctionTableCallbacks                 : false

请注意,这是一项安全功能,因此禁用它需要您自担风险。有两种选择:

  • 如果您知道是哪个模块导致的,您可以将完整路径添加到寄存器:HKLM\Software\Microsoft\Windows NT\CurrentVersion\KnownFunctionTableDlls 注册表项
  • 您可以使用 .settings set EngineInitialization.VerifyFunctionTableCallbacks=false
  • 禁用它

第二个选项仅为当前会话禁用它。如果你想让它永久化,你可以在后面加上.settings save