【发布时间】:2009-06-22 07:45:59
【问题描述】:
我正在调试一些 Windows API,堆栈跟踪显示 Unloaded_hext.dll。我找不到这个 DLL。即使没有符号,WinDbg 也会输出这个 DLL 名称。进程监视器找不到这个 dll。
为什么要加上'unloaded'前缀?这是WinDbg做的还是有什么技巧?
在运行lm 命令时,我可以在卸载模块部分看到hext.dll。但是,如果它被卸载,为什么它会被堆栈跟踪显示?
【问题讨论】:
我正在调试一些 Windows API,堆栈跟踪显示 Unloaded_hext.dll。我找不到这个 DLL。即使没有符号,WinDbg 也会输出这个 DLL 名称。进程监视器找不到这个 dll。
为什么要加上'unloaded'前缀?这是WinDbg做的还是有什么技巧?
在运行lm 命令时,我可以在卸载模块部分看到hext.dll。但是,如果它被卸载,为什么它会被堆栈跟踪显示?
【问题讨论】:
WinDBG 甚至在模块已被卸载后仍会跟踪它们,以使调试更容易。
通常,那些卸载的模块不应该出现在堆栈跟踪中。如果他们这样做,卸载发生在模块仍在使用时(FreeLibrary 不会阻止)。因此,这种过早卸载是您代码中的一个错误。
【讨论】: