我有一个64位Windows2008R2VM,我在其中安装了来自SDK的Windows64位调试工具。现在我想安装32位甚至下载相应的ISO-GRMSDK_EN_DVD.iso从http://www.microsoft.com/en-us/download/details.aspx?id=8442然而,该死的东西认为没有什么可安装的,因为已经安装了64位。我怎样才能安装它?编辑好的,我卸载了64位版本。现在,它无法安装并显示这条可爱的消息:SetupcouldnotfindthefileWinSDK_amd64\WinSDK_amd64.msiatanyofthespecifiedso
我正在使用Windbg来研究进程内存,不禁注意到一些人们刚刚接受的东西。打印寄存器时:eax=00000000ebx=008b6f00ecx=01010101edx=ffffffffesi=00000000edi=00465000eip=77f9d022esp=05cffc48ebp=05cffc54iopl=0nvupeingnznaponccs=001bss=0023ds=0023es=0023fs=0038gs=0000efl=00000286请注意ESP和EBP的值低于EIP,这意味着堆栈在某处低于进程的文本部分(!?)。为什么是这样?据我所知(我在Linux中也用gdb做过同
我的应用程序(一个可执行文件)在远程机器上崩溃了。我无权访问该机器,因此我请求了一个通过任务管理器生成的转储。使用WinDbg,在执行命令!analyze-v时,我可以在许多其他内容中看到以下文本EXCEPTION_RECORD:(.exr-1)ExceptionAddress:0000000000000000ExceptionCode:80000003(Breakinstructionexception)ExceptionFlags:00000000NumberParameters:0我怎么知道它是否是导致崩溃的原因?如果不是,我如何确定真正的原因? 最佳
我需要将作为参数传递给WinDbg的字符串与内存中的字符串进行比较。如何实现?例如,字符串位于加载的PE中的特定偏移处。所以,我可以通过执行da/c100轻松读取字符串.但是,我如何使用这个字符串,将它与arg1进行比较?,在WinDbg脚本中,使用.if?(和$SPAT(),我猜)我试图读取da的输出命令进入别名或用户定义的寄存器,但我没有成功。 最佳答案 您可以使用as/c将字符串分配给别名:0:012>as/cHello.printf"%ma",061300000:012>.echo@"${Hello}"Helloworld然
我们在分析在我们开发机器上的客户WindowsXP/32机器上创建的Windows故障转储时遇到了问题。我们的许多开发机器现在都是Win7/64机器,但在WindowsXP下生成的故障转储似乎无法完全解析它们的二进制依赖性,从而导致在VisualStudio(2005)中显示调用堆栈时出现警告。例如,在WindowsXP上生成转储时,从Win7机器加载时无法解析msvcr80.dll:在XP上,WinSxS路径似乎是C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_e6967989
首先我意识到泄漏会导致内存严重碎片化,但请耐心等待。使用WinDbg并附加到进程:使用!heap(或另一个WinDbg命令),如果我正在处理内存碎片而不是泄漏,我应该期待什么?例如,我可以使用“!heapstat”和“!heapstat-hhandle”来归零产生泄漏的代码;但是在这些相同的返回值中是否有暗示碎片化的东西?XP和Vista之间的内存分配是否发生了根本性变化?特别是与DLL和其他库加载有关?我们一直只在XP上开发,所以我不熟悉Vista,但事实证明,当我们在Vista上安装相同的二进制文件时,我们在XP上看到的某些内存问题就会消失。谢谢! 最佳
我正在实现DebugExtensionProvideValue在我的扩展中,这样我就可以提供自定义伪寄存器。它在CDB中完美运行,最初在WinDbg中运行良好,但在停止调试并打开一个新的可执行文件后,发生了一些事情,WinDbg最终处于一种奇怪的不可用状态。当您触发问题时,WinDbg将此消息打印到命令窗口:Unabletodelivercallback,3131发生这种情况后,WinDbg似乎会在命令窗口中打印两次所有输出!我的扩展代码很简单:EXTERN_CHRESULTCALLBACKDebugExtensionProvideValue(PDEBUG_CLIENTClient,U
我试图在windbg中使用“dt”命令查看IMAGE_DOS_HEADER结构:0:001>dtntdll!IMAGE_DOS_HEADER**Symbolntdll!IMAGE_DOS_HEADERnotfound**我搜索了一下,发现其他人已经可以做到这一点:MSDNBlogs>Junyoung'sBlog>PortableExecutableFileFormatonMemoryDump0:000>dtIMAGE_DOS_HEADER77c00000ntdll!IMAGE_DOS_HEADER+0x000e_magic:0x5a4d?MZ+0x002e_cblp:0x90+0x00
我正在尝试优化基于UDP的大型系统中的通信。通过优化,我的意思是尽量减少数据包的丢失。(是的,我知道UDP的固有局限性,不建议使用其他协议(protocol))我们有几个.exe,每个都有几个线程,并使用setsockoptwithSO_SNDBUF&SO_RCVBUFtoincreasetobufers.我们经历过为许多套接字设置非常大的缓冲区会降低整体性能(更多的数据包丢失)但是如何监控这些增加的缓冲区大小的影响呢?.特别是在接收端,我想看看是否有任何端口收到的消息由于缺少缓冲区而被丢弃。请建议如何做到这一点,(用户或内核模式下的Windbg,特殊程序,自知之明)编辑:@EdChu
是否可以在windbg中的nativec++应用程序转储中查看线程性能计数器。 最佳答案 不,不可能看到计数器的值,因为它们不存储在C++应用程序地址空间中。您可能从转储中提取的只是线程ID、用户时间、内核时间和运行时间(请参阅!runaway命令)。 关于windows-Windbg故障转储中的性能计数器,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2333719/