我正在尝试使用WinDbg调试我的具有C++非托管内存分配的.NET应用程序。当我尝试运行!heap命令时,我收到以下错误消息:0:022>!heap***ERROR:Symbolfilecouldnotbefound.DefaultedtoexportsymbolsforC:\Windows\system32\KERNEL32.dll-****************************************************************************************Yourdebuggerisnotusingthecorrectsymbol
我已经加载了一个.exe,但出现了这个错误:Microsoft(R)WindowsDebuggerVersion6.12.0002.633X86Copyright(c)MicrosoftCorporation.Allrightsreserved.CommandLine:"C:\Users\Public\SoundLog\Code\CódigoPython\SoundLog\dist\SoundLog.exe"Symbolsearchpathis:***Invalid*************************************************************
注意:/**Trivialcode*/wchar_t*greeting=L"HelloWorld!";char*greeting_="HelloWorld!";WinDbg:0:000>??greetingwchar_t*0x00415810"HelloWorld!"0:000>??greeting_char*0x00415800"HelloWorld!"0:000>db0x004158000041580048656c6c6f20576f-726c642100000000HelloWorld!....00415810480065006c006c00-6f00200057006f00H.
我知道在任何给定时间通过任何类型的WinAPI调用都无法确定线程队列中有多少消息。我有一个应用程序无法运行,因为PostMessage有时会失败(可能是由于队列增长到10000,尽管我不明白它怎么会增长到这么大)。这是一个间歇性问题,我在它发生的那一刻进行了几次内存转储。显然队列必须在某个地方,本文解释了如何获取它http://moyix.blogspot.com/2008_09_01_archive.htmlEachthreadinWindows(representedbythe_ETHREADstrucutre)hasafieldinitsThreadControlBlock(or
当我使用WinDbg分析我们的问题时,我发现了跟踪“AKC!_invoke_watson”。你能帮我解释一下什么是“_invoke_watson”吗?以及如何根据此痕迹知道AKC应用程序的根本原因是什么?DEFAULT_BUCKET_ID:NULL_POINTER_READ_IN_CALLLAST_CONTROL_TRANSFER:from00007ff713fe047eto00007ff713fe03f4STACK_TEXT:00000000`0274efe000007ff7`13fe047e:00000000`024a36d800000000`ce9f27b400000000`02
这是我刚刚发现的错误!万岁。该错误是由于不正确的向下转换引起的,实际上我正在使用static_cast而不是dynamic_cast.我的应用程序非常大并且是多线程的并且与其他应用程序交互。所以调试非常困难。我试过使用WinDbg,GFlags,和ApplicationVerifier没有结果。当然是因为我不知道如何使用这些工具。是否有可能通过使用WinDbg等工具找到由于无效向下转换而导致的内存堆损坏?如果是,如何? 最佳答案 Windbg!heap–s–v命令可以揭示损坏的堆0:008>!heap-s-vHeapFlagsRes
我阅读了一篇关于VisualStudio2012能够在即时窗口中支持Windbg命令的帖子。这需要在选择“附加到进程”选项下的传输时选择“Windows用户模式调试器”选项。虽然这似乎适用于本地主机限定符,但我很想知道我是否可以使用这种方法调试远程目标进程,就像我们通过选择远程传输所做的那样。我使用的是VisualStudio2012Premium。我尝试在选择了“Windows用户模式调试器”传输的限定符部分提供机器的IP,但我收到了“无法连接到机器”消息。我也尝试了这个链接中提到的步骤:http://msdn.microsoft.com/en-us/library/windows/
通常,enum值是简单的编译器增量值或直接设置为整型文字,因此可以通过查看源文件轻松推导出或直接看到这些值。但是,有时enum值用于将类内常量设置为等于在别处定义的值或不容易复制的编译时表达式的结果。有没有办法让Windbg向我显示每个enum成员在那些更棘手的情况下的实际值? 最佳答案 考虑这个小结构:structfoo{enumenum1{enum1_val1_=5,enum1_val2_,};enumenum2{enum2_val1_=0x0001,enum2_val2_=0x0010,};enum{//assumethese
说明星号(*)代表零个或多个字符。问号(?)代表任意单个字符。包含字符列表的方括号([])代表列表中的任何单个字符。恰好匹配列表中的一个字符。在这些括号内,您可以使用连字符(-)指定范围。例如,Prog[er-t7]am匹配“Progeam”、“Program”、“Progsam”、“Progtam”和“Prog7am”。数字符号(#)代表零个或多个前面的字符。例如,Lo#p匹配“Lp”、“Lop”、“Loop”、“Looop”等。您还可以将数字符号与括号组合起来,因此m[ia]#n匹配"mn","min","man","maan","main","mian","miin","miain",等
在开始使用WinDbg之前,我们需要设置一下符号。简介符号文件包含大量的数据,比如全局变量,局部变量,源行号,这些数据在运行二进制文件时实际上并不需要,但在调试过程中很有用,比如我们写.net程序时生成的PDB文件。符号可以包括名称、类型(如果适用)、存储地址或寄存器以及任何父符号或子符号。符号示例包括变量名(本地和全局)、函数以及模块的任何入口点。调试器从位于本地文件系统的或从远程符号服务器加载的符号文件中获取其有关符号的信息。使用符号服务器时,调试器将自动使用正确的符号文件版本来匹配目标中的模块。如果要执行我们自己程序的调试,则需要我们程序的符号。如果要执行内核模式调试或者依赖的Windw