问题:我需要制作一个脚本或表达式,如果调用堆栈上某处是具有特定名称的函数,它不会中断。具体问题:如何将调用堆栈上的函数获取到字符串列表?示例:Module!MyFunctionWithConditionalBreakpointModule!Function1Module!Function2Module!Function3Module!MyFunctionWithConditionalBreakpointModule!Function1Module!ClassA:MemberFunctionModule!Function3我希望Module!MyFunctionWithCondition
我有两个C++函数重载,我想在其中一个上设置断点:0:000>bumyexe!displayerrorMatched:00000000`ff3c6100myexe!displayError(int,HRESULT,wchar_t*)Matched:00000000`ff3c60d0myexe!displayError(int,HRESULT)Ambiguoussymbolerrorat'myexe!displayerror'哎呀,我可以在所有重载上设置断点,但似乎无法弄清楚如何:0:000>bumyexe!displayerror*Matched:00000000`ff3c6100my
我正在完成Windows系统编程的练习,但我没有完全理解LARGE_INTEGER和OVERLAPPED结构。例如,我在main中定义了以下结构。第一个结构用于跟踪记录数。第二个用于记录数据。作者定义并使用两个重叠结构来跟踪记录文件偏移量。typedefstruct_HEADER{DWORDnumRecords;DWORDnumNonEmptyRecords;}HEADER;/*8bytes*/typedefstruct_RECORD{DWORDreferenceCount;SYSTEMTIMErecordCreationTime;SYSTEMTIMErecordLastRefernc
我正在试验LibVMI和Windows732位;为了正确设置,我需要查看EPROCESS结构的前8个字节(库在内存中搜索魔数(MagicNumber),应该就是它)。我的Windows-fu不强,所以谁能告诉我如何转储适当的内存位?我正在运行本地内核调试器,我已经得到了“dtnt!_EPROCESS”,但这似乎只是向我展示了结构的格式,而不是其中的实际内容。 最佳答案 命令是:dtnt!_EPROCESS您应该能够从!process07的输出中获取地址。 关于windows-使用wind
我是一个完全的WinDbg新手,我一直在尝试调试一个客户发给我的WindowsXP问题,我们的软件和一些第三方软件阻止Windows注销。我已经重现了这个问题,并验证了只有当我们的软件和客户的软件都安装了(虽然不一定在注销时运行)时才会出现注销问题。我观察到当用户尝试注销时WM_ENDSESSION消息没有到达正在运行的窗口,而且我知道第三方软件使用内核驱动程序。我一直在查看WinDbg中的进程,我知道csrss.exe通常会向所有窗口发送WM_ENDSESSION消息。当我跑的时候:!进程823560206查看csrss.exe的堆栈我可以看到:WARNING:FrameIPnoti
我知道如何手动使用AppVerif和windbg来调试进程问题,但我正在组装一个自动化系统以在没有用户在场的情况下运行一系列压力测试。我需要一种方法来在AppVerif发现问题时生成进程转储并继续(假设这是一个非fatalerror)。有没有办法正确配置AppVerif以仅生成进程转储而不是中断,或者我是否必须附加windbg并以某种方式使其自动化以在中断发生时创建转储,然后继续. 最佳答案 不,这不是appverif.exe的内置功能。这不是真正的问题,您可以使用另一个程序来生成小型转储。喜欢SysInternals'ProcDu
简而言之,我想创建一个断点,将部分内存保存到文件并继续,如下所示:bpmymodule!MyReader::issueRead+0x2e".writememC:\writemem\write_$t1rdxLr8;g"$t1是在其他断点递增的计数器。问题是$t1(或${$t1}未在文件名中解析,我以名为“write_$t1”的文件结尾 最佳答案 WinDbg的脚本总是有点老套。以下似乎有效,尽管我还没有将它应用于断点:aS/cfilename.printf"c:\\writemem\\write_%i",$t1;.block{.wri
我遇到了一个错误,但我无法创建进程转储。我创建了系统的完整内存转储。我如何使用它提取进程转储?Windows。 最佳答案 你不能。通常,属于您的进程的某些内存段可能会被调出并且不驻留在物理内存中。这意味着使用完整的内核内存转储,您不能保证重建进程地址空间。在许多情况下,您可以从内核转储中提取有关进程的有用信息。但是有两个限制:正如我已经提到的,内存可以调出。许多WinDbg扩展不能与内核转储一起使用。这包括SOS,因此从内核空间调查托管进程要困难得多。 关于windows-从完整内存转储
我们的应用程序中有一个缓慢的内存泄漏,我已经通过以下步骤尝试分析泄漏的原因:在GFlags中启用用户模式堆栈跟踪数据库在Windbg中,键入以下命令:!heap-stat-h1250000(其中1250000是发生泄漏的堆的地址)比较多个转储后,我看到大小为0xC的内存块随时间增加,可能是泄漏的内存。键入以下命令:!heap-fltsc给出这些分配的UserPtr,最后:在其中一些地址上键入!heap-p-aaddress总是会显示以下分配调用堆栈:0:000>!heap-p-a10576ef8address10576ef8foundin_HEAP@1250000HEAP_ENTRYS
我有我的应用程序的故障转储。我的应用程序失败,因为一些用户说“无效指令”试图执行我在那里的一些SSSE指令。在WinDBG中,如何找出CPU型号,以便找出其指令集,并支持该指令集,或更新应用程序的最低硬件要求?这是!cpuid的输出:CPF/M/SManufacturerMHz016,4,33000116,4,33000216,4,33000316,4,33000谷歌说的其余命令可能会帮助(!errrec,!cpuinfo,!sysinfo)打印“未找到导出”。 最佳答案 你肯定不会在这里得到太多信息。尽管转储通常不包含所有原始CP