在Windows堆栈跟踪中,“Unloaded”前缀是什么意思?

在Windows堆栈跟踪中,“Unloaded”前缀是什么意思?,第1张

概述在Windows堆栈跟踪中,“Unloaded”前缀是什么意思?

我有一个第三方DLL的地狱般的问题,看起来会导致recursion堆栈溢出崩溃,当它被卸载。 我把这个图案放在堆栈上(使用windbg):

<Unloaded_ThirdParty.dll>+0xdd01 ntdll!ExecuteHandler2+0x26 ntdll!ExecuteHandler+0x24 ntdll!KiUserExceptiondispatcher+0xf <Unloaded_ThirdParty.dll>+0xdd01 ntdll!ExecuteHandler2+0x26 ntdll!ExecuteHandler+0x24 ntdll!KiUserExceptiondispatcher+0xf ...

正如你所猜测的,我没有ThirdParty.dll的源代码。

问:在堆栈转储中,前缀“Unloaded_”是什么意思? 之前我没有碰到过这个。

库导入:#pragma comment VS Visual Studio项目input

为什么windows不从我的exe文件中获取128像素的图标?

在特定的cpu上运行,而不是一个goroutine?

我在哪里可以下载Visual Studio 2012 RC和windows 8客户预览?

即插即用ID(PNPID)是否适用于每个设备?

OpenCV for AndroID可以利用标准的C ++支持来获得AndroID Studio 2.2 for windows上的本机构build支持吗?

如何在windows中编写简单而简洁的WDM驱动程序自定义接口?

在windows上将CTRL + C发送到subprocess树

从callback窗口function(windows OS)中删除窗口可以吗?

在Golang中使用Exec时如何隐藏命令提示符窗口?

这意味着ThirdParty.dll不再被引用,并且在发生崩溃时已经从内存中删除。 要找出实际的堆栈跟踪,需要使用以下命令将.dll重新加载到内存中的原始位置:

.reload /f ThirdParty.dll=0xaaaaaaaa

当然,你需要用0xaaaaaaaa的原始基地址替换0xaaaaaaaa 。 如果模块已经被卸载,这可能有些困难,但是如果你有一个指向dll的HMODulE ,那么HMODulE的值就是基地址。 最糟糕的情况是,你可以在你的代码中添加一个调试器跟踪语句,以便在卸载之前记录dll的HMODulE 。

我之前就有过这样的崩溃,而Js也指出这意味着dll在崩溃之前就已经被卸载了。 但是,将堆栈跟踪到该dll可能不一定会提供您需要诊断问题的信息。

你的代码中的某些东西正在卸载这个库,因为它认为它已经完成了,但是你仍然有一个指向它的指针(或者指向它里面的一个函数)。 我的猜测会是一个回调,也许从另一个线程。 我建议通过你的来源搜索Freelibrary()任何调用,并在Freelibrary符号上放置一个断点。 找出库被卸载的位置,然后确保所有引用dll的数据都被重置。 如果您有多个线程,请使用互斥锁。

一个可能对此非常有用的工具是出色的进程监视器 ,我认为它会显示你将加载和卸载事件,并会给你一个堆栈跟踪每一个。

总结

以上是内存溢出为你收集整理的在Windows堆栈跟踪中,“Unloaded”前缀是什么意思?全部内容,希望文章能够帮你解决在Windows堆栈跟踪中,“Unloaded”前缀是什么意思?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1155303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存