草庐IT

c++ - Windows 堆分配调用堆栈 - 奇怪的调用堆栈

我正在尝试分析托管进程内存转储,怀疑是否存在native内存泄漏。为了能够使用windbg(并从那里使用!heap扩展),我为服务器进程激活了用户模式调用堆栈我看到很多大小为68的block。在这些block中(我可以使用!heap-p-a手动验证的block)有许多调用堆栈的形式!heap-p-a000000003ca5cfd0address000000003ca5cfd0foundin_HEAP@1ea0000HEAP_ENTRYSizePrevFlagsUserPtrUserSize-state000000003ca5cfa000090000[00]000000003ca5cfd

windows - WinDbg:设置断点时无法解决 xyz!abc::func 处的错误

我已将WinDbg附加到进程。当我使用命令bp设置断点时。我收到以下错误:bpxyz!abc::funcCouldn'tresolveerroratxyz!abc::func怎么了? 最佳答案 当你执行lmmxyz时,你得到了startendmodulename4d6c00004dc59000xyz(exportsymbols)C:\ProgramFiles\pathtoxyz术语exportsymbols告诉我们它只加载了DLL的“公共(public)”函数。要加载私有(private)符号,请执行.sympathc:\path\

windows - 我可以从 Windows 上的 ghc Haskell 进程转储中收集哪些信息?

我的命令行应用程序的一位用户报告说出现了一个无限循环。当进程处于这种状态时,他们很有帮助地转储了进程(通过任务管理器)并将其发送给我。我不确定如何从这个转储中获取有用的信息。我的windbg-zthe-dump-file.dmp-yreleases\v5.0.0-ireleases\v5.0.0的常规技术没有提供太多我知道如何解释的信息。我可以改用特定于ghc的工具吗?下一步,我应该在发布过程中添加构建选项还是我应该做的其他事情,以使这种事后调试更有成效?这是我看到的堆栈示例。没有太多有用的信息,特别是对于习惯在WinDbg中调试C/C++代码的人来说。:-)0Id:112dc.cc1

windows - 拆卸卸载的模块

得到一个以卸载模块结束的堆栈跟踪。为了确保堆栈有意义,我想反汇编卸载的模块(另一方面检查调用是否可以从给定的地址开始(访问冲突:尝试从无效地址读取))。我可以加载模块(windbg):.reloadUnloaded.Dll=base,size但是在重新加载之后我无法反汇编代码。有没有办法做到这一点?在此先感谢您的帮助!G更多 最佳答案 来自MarcSherman的提示(参见上面的评论):使用windbg,您可以加载一个dll作为故障转储。加载后键入“lm”命令并在相对于给定基数的所需地址上进行反汇编。

java - jstack 结果为 "Windbg Error: WaitForEvent failed"

在Windows7上,我尝试通过执行命令从Java进程获取堆栈跟踪jstack.exe-Fxxx来自另一个Java进程,其中xxx是目标进程的PID。我遇到了错误Errorattachingtoprocess:WindbgError:WaitForEventfailed!知道为什么吗? 最佳答案 您可能需要以管理员身份运行该命令。如果您没有该过程的访问权限,您也会收到相同的错误消息。 关于java-jstack结果为"WindbgError:WaitForEventfailed",我们在

c++ - 以 headless 模式运行 WinDbg

有没有办法在纯headless模式下使用WinDbg?我的用例是我应该能够在不启动WinDbgGUI的情况下为命令行上的小型转储模仿“!analyze-v”命令。 最佳答案 对于Windows调试工具,还有cdb,控制台调试器。要调试故障转储,请使用-z""选项。要立即运行命令,请使用-c"".要将所有内容输出到文件中,您可以使用常用的DOS重定向输出>或使用.logopen打开日志文件.要在分析后退出CDB,请使用q.您想确保符号设置正确,因此请包含.symfix;.reload.我更喜欢使用.symfix在命令中而不是-y,所以

c# - 在 WinDbg 中调试 C# 应用程序

我正在尝试在没有VisualStudio的系统上调试用C#编写的应用程序。应用程序没有崩溃......但我需要确定某些变量的值,以及是否访问代码的某些部分,基于我无法在VisualStudio所在的同一位置访问的驱动程序。我在虚拟机中运行此测试环境,无法访问互联网。我一直无法安装符号文件...但到目前为止这无关紧要。我一直在使用附加到此应用程序的WinDbg对驱动程序(c/c++)进行故障排除。我希望也能够从C#向WinDbg发送调试消息。System.Diagnostics.Debug.Write("helloworld\n");没有出现...我不知道是否相关,但我在添加Debug.

windows - 句柄分配在哪里?

我想知道是否可以使用WinDbg来了解导致分配句柄的调用堆栈。例如:#include#include#includeusingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){cout构建此示例并在WinDbg中启动它后,是否有可能获得分配句柄的调用堆栈,在该行上方的示例中:HANDLEh=CreateEvent(NULL,FALSE,FALSE,NULL);我正在研究!handle命令,但到目前为止没有任何进展。这与处理泄漏分析有关。我知道!htrace-enable和!htrace-diff但这是不同的使用场景(除非有某种组合方式或其他使用

windows - 使用 gflags +ust 可以更快地增加进程内存

在尝试查找Windows应用程序中的一些内存泄漏时,我遇到了gflags的问题。当我打开ust标志(为了收集内存分配堆栈跟踪)时,我的应用程序的内存增加速度比关闭该标志时快得多(它在10分钟内达到800MB最小大约。这与我在关闭标志时获得的50-100MB/天相去甚远。我读到堆栈跟踪的最大值为32MB,所以我想这应该不是问题。计算机是4xIntel(R)Xeon(R)CPUE5410@2.33GHz。如果有人能给我一些提示,我将不胜感激。谢谢! 最佳答案 堆栈跟踪数据库并不是ust标志的唯一影响。它还向每个分配添加至少32个字节,以

windows - 给定一个指针,我如何找到它所属的 _HEAP_ENTRY?

我正在学习使用WinDbg,我可能会偏离正轨,但我假设如果我的程序没有使用分页堆,而不是“拥有”的_DPH_HEAP_BLOCK结构一个指向我的分配的指针,我会为分配的数据设置一个_HEAP_ENTRY。给定堆上已分配数据的地址,我如何找到与之对应的_HEAP_ENTRY(在WinDbg中),或者我的问题甚至没有意义?我的问题的根源是我想知道转储中的分配是否已释放或堆是否以某种方式损坏。 最佳答案 !heap-p-a启用页堆后,这会转储出有用的信息(可能包括最后一个分配/释放此堆block的人的调用堆栈)-我认为这可视化了_DPH_