Articles of windbg

使用windbgdebugging.NET转储

我做了一个转储(在procdump.exe中使用-ma选项和一个高CPU触发器),我想看看我的代码正在运行的线程在运行的线程。 我得到这个: *** procdump -ma -c 65 -s 2 -n 3 service.exe *** Process exceeded 65% CPU for 2 seconds. Thread consuming CPU: 4396 (0x112c)' 指定的线程正在执行,在转储时间: 0:022> k ChildEBP RetAddr WARNING: Frame IP not in any known module. Following frames may be wrong. 0990f104 040666ab 0x40656f8 0990f124 04066465 0x40666ab 0990f14c 040655e2 0x4066465 0990f160 040651f4 0x40655e2 […]

拆卸卸载的模块

得到一个以未加载模块结束的堆栈跟踪。 为了确保堆栈有意义,我想拆卸卸载的模块(在其他地方检查是否可以在给定的地址(访问冲突:试图从无效地址读取)开始调用)。 我可以加载模块(windbg): .reload Unloaded.Dll=base,size 但是在重新加载之后,我无法反汇编代码。 有没有办法做到这一点? 提前感谢任何帮助! GMore

windbg:是否可以在我自己的程序中embeddedWindgb引擎?

我想编写一个debugging/诊断工具,可以调用Windbg函数来检查转储文件,而不是写windbg扩展名。 这是可能的和任何参考? 非常感谢。

windbg首先连接,然后在内核debugging过程中卡住“Debuggee not connected。”消息

我正在尝试进行Windows内核debugging,所以我为此设置了两台机器: HOST – DEBUGGER – 运行windbgdebugging器的计算机 TARGET – DEBUGEE – 被debugging的计算机 HOST和TARGET都运行Windows 7 32位并且都安装了Windows Driver Kit 8.0。 我做了以下步骤: 在目标我已经使用以下命令启用内核debugging: bcdedit /copy {current} /d "Windows 7 wih debug" bcdedit /debug {02b760e4-eafc-11e4-8847-ac1155aec81a} on bcdedit /dbgsettings serial debugport:1 baudrate:115200 bcdedit /set {bootmgr} displaybootmenu yes bcdedit /timeout 10 然后我开始了HOST,并做了以下步骤: 开始windbg 文件 – >内核debugging – > COM 波特率:115200,端口:COM1,pipe道:未选中,重新连接:未选中,复位:0 好 在这之后,我在HOST上的windbg命令窗口如下所示: […]

如何获取内核转储中的Section对象的内容

来自3Party供应商的section对象被命名为rpsPdf10.mutex ,它的用途是通过向它写一个布尔标志来模仿一个信号量。 使用LiveKd和来自SO的许多帮助,我已经发出了下面的命令试图获得这个Section对象的详细信息。 0: kd>!process 0 0 3thParty.exe … PROCESS fffffa800ea80060 SessionId: 0 Cid: 0a00 Peb: fffdf000 ParentCid: 014c DirBase: 99349000 ObjectTable: fffff8a004448bf0 HandleCount: 338. Image: 3thParty.exe … 0: kd> !handle 0 7 fffffa800ea80060 … 08 fffff8a012e26710 Section rpsPdf10.mutex … 0: kd> !object fffff8a012e26710 Object: fffff8a012e26710 Type: (fffffa800cd7cea0) Section ObjectHeader: fffff8a012e266e0 (new version) HandleCount: 38 […]

哪里可以find并下载mscorwks.dll和mscordacwks.dll的不同版本?

我试图习惯使用WinDbg来解决崩溃转储时,我能够得到他们,但每次我这样做似乎是要求我的mscorwks.dll和mscordacwks.dll的不同版本,我不从来没有机会获得转储来自的机器。 除了告诉最终用户,他们必须在他们的Windows目录中挖掘这些文件,然后向我发送一个非常大的“迷你”转储文件,还有什么地方可以获得这些文件的不同版本的副本? WinDbg似乎无法通过微软的符号服务器find它们。

Windows崩溃转储调用堆栈只显示wow64

问题 我有一个Windows应用程序,我们在室内使用开发。 感谢Windowserror handling,窗口保持打开,我可以轻松地从任务pipe理器生成崩溃转储。 我曾经在eclipse上通过eclipse在linux上使用过crash-dumps,但是这是Windows上的第一次。 硬件 服务器是Windows 2012,而我的开发机器是Windows 7。 WinDbg的 当我在Windbg中加载崩溃转储时,加载我的符号,然后select查看调用堆栈,唯一的列表是: 我怎样才能看到我的应用程序调用堆栈?

以无头模式运行WinDbg

有没有一种方式在WinDbg在纯粹的无头模式? 我的用例是我应该能够在命令行模拟“!analyze -v”命令,而不用启动WinDbg GUI。

WinDbg:尝试附加到进程时dbghelp.dll的版本不匹配

一年前,我已经使用WinDbg和DebugDiag来查找JNI本地DLL中的内存泄漏,我们在Java中使用它。 现在我正在寻找一个线程处理泄漏。 我使用Process Explorer创build了一个内存转储,并试图在DebugDiag中进行分析,但是我得到的只是脚本错误: 我也尝试过WinDbg,但是它不能够附加到一个进程了。 我总是得到错误消息“dbghelp.dll与debugging器版本不匹配”: (“Unbekannter Fehler”的意思是“未知错误”) 我卸载了DebugDiag和Windows SDK,然后下载了最新的版本,并安装了Windows SDK 8和DebugDiag 1.2(x86)。 问题保持不变。 即使使用V7.1(最新的Windows 7 SDK)replaceWindows SDK之后,也没有任何变化。 我正在使用Windows 7(32位)的机器。 我认为DebugDiag中的问题与WinDbg中的问题具有相同的原因。 但我不明白版本不匹配是什么意思(和谷歌search也没有帮助): WinDbg:6.12.0002.633 dbgeng:6.12.0002.633 dbghelp:6.12.0002.633 我怎样才能使WinDbg(希望DebugDiag)再次工作?

调查内存泄漏

我们在应用程序中有一个缓慢的内存泄漏,我已经通过以下步骤来分析泄漏的原因: 在GFlags中启用用户模式堆栈跟踪数据库 在Windbg中,键入以下命令: !heap -stat -h 1250000 (其中, 1250000是具有泄漏的堆的地址)比较多个转储后,我看到大小为0xC的存储器块随着时间而增加,内存泄漏。 input以下命令: !heap -flt sc给出UserPtr的这些分配,最后: 在这些地址上inputheap -p -a地址总是显示下面的分配调用堆栈: 0:000> !堆-p -a 10576ef8 address 10576ef8 found in _HEAP @ 1250000 HEAP_ENTRY Size Prev Flags UserPtr UserSize – state 10576ed0 000a 0000 [03] 10576ef8 0000c – (busy) mscoreei!CLRRuntimeInfoImpl::`vftable' 7c94b244 ntdll!RtlAllocateHeapSlowly+0x00000044 7c919c0c ntdll!RtlAllocateHeap+0x00000e64 603b14a4 mscoreei!UtilExecutionEngine::ClrHeapAlloc+0x00000014 603b14cb mscoreei!ClrHeapAlloc+0x00000023 603b14f7 mscoreei!ClrAllocInProcessHeapBootstrap+0x0000002e 603b1614 […]