问题标签 [memory-dump]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8215 浏览

delphi - 如何从 Delphi DLL 文件中分析转储文件?

我是同时使用C#和 Delphi 2006 代码的产品的升级工程师。

在大多数情况下,使用WinDbg和 Delphi 2006 使用EurekaLog调试 C# 问题。

但是当问题是 Delphi 内存使用时,EurekaLog 没有提供足够的信息来解决这个问题,我唯一可以调试它的是一个完整的内存转储文件。

我不能(或者我不知道如何)在 WinDbg 中加载符号文件,因为它是.map文件而不是.pdb文件。

所以我的问题是:

  • 如何从 WinDbg 中的 .map 文件加载符号?(转换.map.pdb或其他。)

  • 是否有工具可以分析 Delphi 应用程序的转储文件?

0 投票
2 回答
1923 浏览

windows-server-2008 - 如何在 Windows 2008 64 位服务器中转储内存?

我想分析我的 ASP.NET 应用程序中的内存泄漏,如何在 windows 2008 64 位服务器中转储内存?

0 投票
3 回答
340 浏览

php - 从 PHP 4 到 5 过渡的内存泄漏 - 有什么提示吗?

我正在将大型 Web 应用程序移植到共享 Web 托管环境。该应用程序是用 PHP 4 编写的。新环境具有 PHP 5.2。

出于某种原因,该应用程序在 PHP 5.2 中运行时会泄漏大量内存。我可以使用 memory_get_usage() 从字面上观察内存使用情况,直到达到 64 MB 的限制(这在共享环境中非常慷慨,该站点过去在 PHP 4 上以 12 或 16 MB 运行)。

我怀疑这是 PHP 5 中发生变化的副作用,很可能是处理参数中的对象引用。但是,搜索导致泄漏的特定行为非常困难,因为应用程序非常复杂,并且部分编写得不是很好(是的,它是我的)。

由于该应用程序安装在共享网络空间上,因此我无法使用经典的调试工具(据我所知)。我非常非常想避免在本地重新创建环境,因为我整天都在从事这个项目一段时间。

所以我的问题是:

  • 有谁知道典型的 PHP4 => 5 转换陷阱,尤其是在处理大量对象时,这可能是我泄漏的原因

  • 有没有人知道某种独立于调试器的、仅脚本的“图形范围转储”工具,用于 PHP 使用的变量,可以帮助我找出哪些变量正在占用这些大量内存?

0 投票
1 回答
15459 浏览

web-applications - 自定义错误模块无法识别此错误

如果您在 Outlook Web Access 中点击“自定义错误模块无法识别此错误”,并且您使用的是 Firefox;那么您的会话可能刚刚超时!你刚刚写了一封大邮件!!!如果您返回,所有表单字段都将为空白!

与其尝试转储 postdata,不如在 https 上使用wireshark 或其他任何可笑的方法:在 Firefox 中打开一个新选项卡或窗口,然后在该新选项卡/窗口中重新登录您的 OWA 站点。回到提交失败的选项卡/窗口,在消息体区域右击-> This Frame... -> Reload this frame -> Resubmit form!您的电子邮件将成功发送。

如果这个技巧不适合你,那么我建议查看 Lazarus(Firefox 插件);记住使用文本编辑器并保存您的电子邮件信函;或者至少在提交之前跳过并“Ctrl + C”复制邮件正文。希望这可以帮助任何查看 Google 结果的人想知道如何取回他们的信息。

现在,我的问题是:在同样的情况下,你还能做什么? 宝贵的表单数据在内存中,您正在使用的 https Web 应用程序 [或至少是会话] 现在已经消失,您的大量未保存的工作悬而未决。

假设这是在win32上,你能做些什么来把它找回来?

例如,你能以某种方式进行内存转储吗?配置代理并打印流?可以在不关闭或重新启动进程的情况下访问 Firefox 的会话数据吗?请给一些想法?

0 投票
3 回答
835 浏览

java - 访问正在运行的 JVM 原始内存

如果这是一个无知的问题,请原谅我,我并不是一个专业的程序员,只是好奇。是否可以从正在运行的程序内部读取工作内存,例如类的实例?

我知道你可以做类似的事情println(theInstance.getClass());,它会给你实例的内存地址(我假设就是这样)。我想知道是否可以做一些byte[]memory = theInstance.getClass().getMemory(); println(toString(memory));我知道的事情,但只是为了说明。

0 投票
2 回答
971 浏览

batch-file - 使用 adplus.vbs 捕获转储 - 等待调试器完成?

我有一个 Web 应用程序,有时会挂起。我想调查原因,当它挂起时,我需要获取进程的内存转储。

所以我的想法是监控网站,当我检测到挂起时,我想启动一个 .bat 脚本来捕获内存转储,然后运行 ​​IISRESET 以重新启动,以便网站再次开始响应。

我的问题是,adplus 启动另一个进程 (cdb.exe) 并立即返回。我需要等待 cdb.exe 完成,然后才能运行 IISRESET。有没有办法在批处理脚本中做到这一点?或者,我可以在 adplus 命令行上指定它不应该在内存转储被收集之前返回吗?

0 投票
4 回答
13432 浏览

debugging - 在 Windows Server 2003 中创建进程的内存转储?

从 Windows Vista 开始,我们可以选择直接从任务管理器创建进程的内存转储。遗憾的是,Windows Server 2003 还没有这个选项 :( 我找到了做一个完整的系统范围内存转储的方法,但这有点太多了。

有没有办法转储单个进程?由于这是一个生产服务器,我不想安装任何在后台运行的重量级工具或服务,理想情况下我只想转储进程,将转储复制到我自己的机器上并在那里调试它。

0 投票
2 回答
483 浏览

.net - 为什么转储 .NET 进程会增加内存使用量

我们有一个 .NET 服务在启动时使用约 30MB 的内存。(VM ~= Mem 使用情况)
我想转储进程并找出持有这些 30MB 的内容。

生成迷你转储的 CDB 调试器将内存使用量增加了 100MB
从转储中我可以看到那 100MB 是图像内存(DLL)

在调试器分离后很久,内存使用率仍然很高。我想知道这个图像加载/内存增加的原因是什么?

谢谢。

0 投票
4 回答
1192 浏览

c++ - 如何基于 WinDbg 扩展中的转储文件内存创建对象?

我在一个大型应用程序上工作,并且经常使用 WinDbg 根据客户提供的 DMP 文件来诊断问题。我已经为 WinDbg 编写了一些小扩展,这些扩展对于从 DMP 文件中提取信息非常有用。在我的扩展代码中,我发现自己以同样的方式一遍又一遍地手动取消引用 c++ 类对象。例如:

这很好用,但是随着我编写了更多的扩展,具有更强大的功能(并在我们的应用程序 DMP 文件中访问更复杂的对象),我渴望有一个更好的解决方案。我当然可以访问我们自己的应用程序的源代码,所以我认为应该有一种方法可以将对象从 DMP 文件中复制出来,并使用该内存在调试器扩展中创建一个实际的对象,我可以在该对象上调用函数(通过从我们的应用程序中链接 dll)。这将省去我用手从 DMP 中取出东西的麻烦。

这甚至可能吗?我尝试了一些显而易见的事情,比如在扩展中创建一个新对象,然后直接从 DMP 文件中用一个大的 ReadMemory 覆盖它。这似乎将数据放在正确的字段中,但当我尝试调用函数时吓坏了。我想我错过了一些东西......也许c ++会带来一些我不知道的vtable funky-ness?我的代码与此类似:

跟进:看起来可能来自 EngExtCpp 的 ExtRemoteTyped 是我想要的?有没有人成功使用过这个?我需要谷歌搜索一些示例代码,但运气不佳。

跟进 2:我正在对此进行两种不同的调查。
1) 我正在研究 ExtRemoteTyped,但看起来这个类实际上只是 ReadMemory/GetFieldOffset 调用的助手。是的,这将有助于加快速度,但在从 DMP 文件重新创建对象时并没有真正的帮助。虽然文档很薄,所以我可能会误解一些东西。2) 我也在考虑尝试使用 ReadMemory 用 DMP 文件中的数据覆盖在我的扩展中创建的对象。但是,我没有像上面那样使用 sizeof(*thisClass) ,而是认为我只会挑选数据元素,而保持 vtables 不变。

0 投票
1 回答
812 浏览

c++ - 如何在运行时从 Windbg 扩展中的 DMP 文件获取类型信息?

这与我之前的问题有关,关于从 dmp 文件中提取对象。

正如我在上一个问题中提到的,我可以通过创建包装“远程”对象成功地将对象从 dmp 文件中提取出来。到目前为止,我已经实现了其中的几个,并且似乎运行良好。但是,我遇到了障碍。

在一种情况下,指针存储在一个类中,例如“SomeBaseClass”类型,但该对象实际上是“SomeDerivedClass”类型,它派生自“SomeBaseClass”。例如,它会是这样的:

我需要一些方法来找出“field1”的实际类型是什么。

更具体地说,使用示例地址:

当我在 WinDbg 中时,我可以这样做:

它会显示类型:

但是我如何在扩展中获得它?我可以使用 SearchMemory() 来查找“SomeDerivedClass::`vftable”吗?如果您关注我的其他问题,我需要此类型信息,以便知道要创建哪种类型的包装器远程类。我认为它可能最终成为某种案例陈述,我必须将字符串与类型匹配?我对此表示同意,但我仍然不知道在哪里可以得到代表相关对象类型的字符串(即上面示例中的 SomeObject->field1)。