2

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

当程序挂起时,我使用 WinDbg 闯入它,并尝试使用~* k. 除了堆栈跟踪,我还获得了页面和页面(以及页面等等)的消息

Unable to read dynamic function table entry at 00000000`2450b580

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

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

我已准备好从问题线程中获取糟糕的堆栈跟踪。

4

2 回答 2

2

如果您正在运行最新版本的 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
于 2016-08-31T18:59:33.050 回答
2

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

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

第二个选项仅对当前会话禁用它。如果您想使其永久化,您可以使用.settings save.

于 2016-09-01T02:37:47.617 回答