我希望为我尝试调试的应用程序禁用LFH。我能够重建和重新部署应用程序,但我无法附加调试器或设置任何gflags。在这些约束下禁用LFH的好方法是什么?是否有我可以在可执行文件本身上修改的属性?或者我可以将一些启动代码添加到程序中? 最佳答案 在Vista和Win7上,我认为您可以使用应用程序兼容性工具包在每个可执行文件的基础上禁用低碎片堆。在XP上,thedocumentation建议youdon'tgetaLFHbydefault.所以可能是你的C++运行时库(你没有命名)打开它。并且一旦启用就无法禁用。因此,请检查您的特定运行时
在Windows调试器中,我试图打印出传递给c函数的数据。我对传递到System_Data_SQLite!sqlite3_step+0x63的数据很感兴趣。0:071>kv20Child-SPRetAddr:ArgstoChild:CallSite00000000`11b82e2800000642`ff864776:00000000`12f6f45000000000`0092dcd800000000`11b8348800000000`11b83480:ntdll!NtGetContextThread+0xa00000000`11b82e3000000000`12f6f450:00000
我想以编程方式从micrsoft符号服务器(http://msdl.microsoft.com/download/symbols)下载符号。例如。给定名称“ntdll.dll”我想将.pdb保存到任何目录中。dbghelp.dll中的API似乎可以解决这个问题。(http://msdn.microsoft.com/en-us/library/windows/desktop/ms679291%28v=vs.85%29.aspx)但我不知道如何以正确的方式使用它们。有没有人以前做过类似的事情并且可以给我一些示例代码?谢谢! 最佳答案 我
使用windbg,通过!dlls命令获取带有加载计数的dll列表。观察到许多加载的dll的加载计数为0x0000ffff。这是默认值吗?那还有别的意思吗?0x00262fa8:C:\WINDOWS\system32\ole32.dllBase0x774e0000EntryPoint0x774fd0b9Size0x0013d000Flags0x80084006`LoadCount0x0000ffffTlsIndex0x00000000LDRP_STATIC_LINKLDRP_IMAGE_DLLLDR**strongtext**P_ENTRY_PROCESSEDLDRP_PROCESS_A
我正在使用.childdbg1在WinDbg中调试脚本。(脚本在无限循环中运行软件的各种测试用例。这样我就可以捕捉到罕见的崩溃。)我不需要附加到特定的子进程(出于性能原因并且因为它们是第三方的并且经常崩溃)。如果我可以通过进程名称指定它们,那将解决我的问题。如果您能提出其他可以满足我需要的调试器,我将不胜感激。注意:将调试器配置为通过GFlags附加到特定进程并不是这种特定情况下的解决方案。 最佳答案 如果你激活了.childdbg1,你可以使用sxecpr。使用-c开关,您可以执行命令。像.if(yourcondition){.d
我使用WinDBG获取句柄信息:kd>!handle430PROCESS85c91030SessionId:0Cid:0388Peb:7ffdc000ParentCid:01e8DirBase:7ee841c0ObjectTable:8da023f0HandleCount:539.Image:svchost.exeHandletableat9a3da000with539entriesinuse0430:Object:8480e038GrantedAccess:00100080Entry:8da01860Object:8480e038Type:(844f9ac8)FileObjectHe
当使用windbg调试托管进程时,如何查看Int64的值?例如,我有以下构造函数,它的第一个参数是Int64。ItemQuotequote=newItemQuote(1234567890987654L,"5mmSuperWidgets",1000,12999,true,false);我使用windbg调试器在上述构造函数中设置断点以检查其参数。反汇编结果如下。ChildSPIPCallSite0042f05c0043025aEncodingInformation.ItemQuote..ctor(Int64,System.String,Int32,Int32,Boolean,Boolea
我有一个应用程序崩溃,结果它在Windows平台上生成故障转储。我将exe和dll文件发送给客户。客户发来了user.dmp和drwtsn32.log文件给我。但是,客户没有对应的pdb文件。客户只有dll和exe文件。因此,当我将此user.dmp文件附加到Windbg时,我没有得到符号。那么,我需要做什么才能获得符号。我需要将pdb文件发送给客户吗?如果是,当发生崩溃时他需要如何处理这些pdb文件?我使用三台不同的机器:a)构建机器,c)客户的测试机器和c)我自己的调试机器(与构建机器不同)。windbg安装在调试机器上。我可以将所有pdb文件从构建机器复制到我的调试机器中。请告诉
到目前为止,我一直在项目中使用Debug模式二进制文件。因此,使用保留的符号文件很容易分析故障转储。现在我必须在Release模式下发布二进制文件。我们如何分析由Release模式二进制文件生成的转储文件。这有可能吗?我如何识别Release模式下的功能?(不需要生成和保存map文件) 最佳答案 您需要与可执行文件相对应的.pdb文件。这会给你符号。调试发布版本有几个棘手的部分:由于优化,操作顺序可能会发生变化整个函数/变量/等等。可能会被优化掉特别是,传递给函数的参数可能不存在(例如,“this”可能是一个寄存器,而不是内存中的一
我有一个正在运行的进程的转储文件(试图查找内存泄漏)我注意到的一件事是,当我通过!do转储更大的对象时,windbg告诉我它们是第3代GC??所有这些都是字节数组,所以当我查看转储中的所有字节数组时,我可以看到第0、1、2和3代GC。谁能解释一下这里发生了什么,因为我认为只有3代GC。>0:000>!do0x0000000011b47450Name:System.Byte[]MethodTable:000007fef7d2e798EEClass:000007fef7932670Size:131096(0x20018)bytesGCGeneration:3Array:Rank1,Numb