草庐IT

windows - 在没有用户堆栈跟踪的情况下使用 windbg 进行内存泄漏调试

我有一个完整的内存转储,但在这种情况下,我没有与之配套的用户堆栈跟踪数据库,我有最新的符号和转储附带的原始二进制文件,通常,我一直能够使用!heap-p-aaddress查看分配时的调用堆栈,但如果没有用户堆栈跟踪数据库,这将无法工作。我的问题是是否有另一种方法(尽管不是那么直接的方法)来找到内存泄漏的根源。LFHKey:0x0000005c2dc22701Terminationoncorruption:ENABLEDHeapFlagsReservCommitVirtFreeListUCRVirtLockFast(k)(k)(k)(k)lengthblockscont.heap----

windows - 如何在 WinDbg 中列出线程(内核调试)

有谁知道我如何在内核调试时列出WinDbg中的所有线程。我发现较早的引用资料中写着“~”,但这不起作用。具体来说,我希望找到导致事件(即断点)的线程的ID。谢谢。 最佳答案 ~仅在用户模式下有效。要列出系统上的所有线程,它是!process01我记得(已经有一段时间了)。"SpecificallyIamlookingtothefindtheIDofathreadthatcausedanevent,namelyabreakpoint."从内核模式执行此语句没有多大意义。你能详细描述一下你的场景吗?编辑:啊,现在我明白了。你想知道你现在

windows - WinDbg 远程调试器协议(protocol)

我想为dbgsrv.exe构建一个客户端。我想知道是否有关于它使用的协议(protocol)的规范,以及是否有任何(开源?)库能够与它通信以进行远程调试session。 最佳答案 编辑:参见https://www.blackhat.com/presentations/bh-usa-07/Stewart/Presentation/bh-usa-07-stewart.pdf对于似乎描述协议(protocol)的演示文稿。同时浏览ReactOS的源代码,似乎有一些协议(protocol)的实现。此外,MicrosoftResearch的S

windows - Windbg 和符号文件

我对符号文件有疑问。我试验了符号文件路径,设置路径如下:srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\driver2\objchk_win7_x86\i386但后来我将其更改为以下内容:srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386我在路径中用mydriver更改了driver2:这是我的驱动程序

windows - NTSD 和 WinDbg 之间到底有什么区别?

我对Windows调试工具有点困惑。WinDbgTutorialWindbg–wrapsKDandNTSDwithadecentUI.WinDbgcanfunctionbothasakernel-modeanduser-modedebugger.这是否意味着我在NTSD中使用的任何命令都可以在WinDbg中使用?每当我进行用户模式调试时,NTSD实际上是在幕后工作吗? 最佳答案 WinDbg、NTSD、CDB和KD都共享相同的调试引擎,因此它们共享所有相同的命令。它们之间唯一的区别是WinDbg有GUI界面,NTSD、CDB和KD有

c# - 使用 windbg 调试 .NET 转储

我制作了一个.NET进程的转储(使用-ma选项和procdump.exe中的高CPU触发器),我想在运行的线程中查看有关我的代码正在做什么的线索。我明白了:***procdump-ma-c65-s2-n3service.exe***Processexceeded65%CPUfor2seconds.ThreadconsumingCPU:4396(0x112c)'指示的线程在转储时正在执行:0:022>kChildEBPRetAddrWARNING:FrameIPnotinanyknownmodule.Followingframesmaybewrong.0990f104040666ab0x

windows - 使用用户模式转储确定 WinDbg 中的线程等待时间

在WinDbg中是否有任何方法可以确定自什么日期/时间起Windows线程被WaitForSingleObjects或WaitForMultipleObjects等函数阻塞?我知道如何在内核调试中执行此操作(使用!thread),但我不知道如何在用户模式调试中执行此操作。 最佳答案 在WinDbg中,您可以使用!runaway来获取线程计时:!runaway!runaway1(用户时间)!runaway2(内核时间)!runaway4(耗时)(您会发现这些在某些地方被记录为0、1和2,但根据我的经验,它们不起作用。可能取决于WinD

.net - Windbg 可以显示线程名称吗?

WindbgshouldunderstandMSexceptionprotocol用于将线程名称传递给调试器。我无法让它工作。在网上看,有很多示例显示没有线程名称的“~”线程列表,这就是我所看到的。我正在调试.NETx86进程,我已经尝试了WDK8.1x86和x64版本的Windbg。有人知道此功能是否仍然可用吗?我错过了什么? 最佳答案 对于.NET线程,以下适用于“普通”Thread(手动创建的线程,因为我不知道如何命名线程池线程):Thread是一个类,因此可以在.NET托管堆中找到:0:000>.loadbysosclr0:

windows - 内核跟踪 Windows 7 WinDbg

我在调试en_windows_7_checked_build_dvd_x86_398742时没有得到任何调试信息。我什至看不到自己的跟踪信息(ATLTRACE)。相反,WindowsXPChecked很有魅力。我在使用Windows7启动调试session时收到“BadQueryIdType:5”消息。内核调试显然已正确设置。请帮助... 最佳答案 我能够在windbg中修复它,在windows732位上:edKd_DEFAULT_Mask8根据msdn文章,也可以使用注册表,但必须重启才能生效。在HKEY_LOCAL_MACHIN

python - 在 windbg 中调试 python 转储文件

我的一个python.exe(v3.5.2)进程在远程WindowsServer中挂起。我无法从远程站点附加它,因此我创建了一个完整的内存转储并将其下载回来进行分析。但是windbg没有gdb中的py-bt这样的工具。我能做的是下载cpython符号文件并加载到windbg中。问题是:如何像“py-bt”一样打印python脚本调用堆栈?调用堆栈如下,看起来像卡在HTTPS连接上0:000>kChildEBPRetAddr0050dd2474592242ntdll!ZwWaitForSingleObject+0xc0050dd6c7459bdeemswsock!SockWaitForS