我正在寻找SOS的!SyncBlk命令生成的输出的描述。特别是我在“MonitorHeld”列上找不到有用的解释。此列显示一系列故障转储中的高值。例子:0:000>!SyncBlkIndexSyncBlockMonitorHeldRecursionOwningThreadInfoSyncBlockOwner440000000005a5c22811000000000e7a67402304273000000019f858cd0System.Object48000000000579bae811000000000e7a72e02370275000000015f999900System.Obje
我正在使用VS.NET2010。我编译了一个非常简单的.NET4.0应用程序。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceTestWindbg{classProgram{staticvoidMain(string[]args){Console.ReadLine();Func1();}staticvoidFunc1(){inti=0;intj=i+2;Console.WriteLine(j);}}}我打开windbg6.12.0002.633编译后的可执行文件
我正在努力应对一个相当困难的调试挑战,希望有人能提供一些线索来完成这项工作。场景如下:我有一个C#Windows服务,它在具有管理员权限的用户帐户下运行,并在具有标准用户权限的用户帐户下启动一个单独的可执行进程。这两个进程旨在使用WCF进行通信。不幸的是,当子进程启动时,它立即崩溃,事件日志中没有任何提示发生了什么。父进程继续运行,没有异常。供引用:这两个应用程序在父进程是桌面应用程序的配置中可靠地协同工作。我也成功地将父进程作为Windows服务,但前提是两个进程都在具有管理员权限的同一用户帐户下运行。我现在需要重新配置它们的关系以限制子进程的权限,但这是崩溃发生的时候。为了证明我正
我们从客户站点收到故障转储。我看到在nstack的结构之一中__vfptr是NUL。它是否总是指向有问题的情况(内存溢出,删除对象两次......)或者这个指针是否可以为空。 最佳答案 您是否在类实例的任何位置使用memset()?我以前见过这个问题,原因是这样的代码classC:SomeClassWithVirtualFunctions{public:C(){memset(this,0,sizeof(C));//BAD!!sets_vfptrto0too}}cppcheck很整洁 关于
我有一个使用SCons和MSVS2013(express)编译器(从命令行编译)构建的项目。它编译并运行,但是,它会定期崩溃,所以我想调试它。我添加了以下标志:/Zi#Debugsymbols/DEBUG#Debugsymbols/FS#Concurrentdebugdatabasefileaccess构建后,我看到生成了一个名为vc120.pdb的pdb文件。我的可执行文件位于build文件夹中,pdb文件位于主项目目录中。但是,当我尝试附加我的可执行文件以通过VS2013或WinDbg进行调试时,我总是收到无法找到调试符号的错误。我在VS2013和WinDbg中都将“路径”添加到p
visualstudio2008是否有任何选项(运行时)来立即检测堆损坏? 最佳答案 如果您查看DebugRoutines的列表从VisualC++调试运行时导出,您可以找到许多有用的调试函数,包括_CrtSetDbgFlags可用于设置调试堆检查自身是否损坏的频率。 关于c++-检测堆损坏,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5921862/
我有一个与travis-ci一起使用的C++项目。现在,我使用boost.build构建它,在travis上,当我运行单元测试时,我通过gdb来构建它。,这样我就可以在发生崩溃时得到回溯。制作gdb以非交互方式执行此操作,我在命令行上这样调用它:gdb-return-child-result-batch-ex"run"-ex"threadapplyallbt"-ex"quit"--args./${file}哪里${file}是我的可执行文件。这告诉它:开始流程申请bt到所有线程,它会在发生崩溃时发出回溯,如果没有崩溃则什么也不做。最终导致gdb退出,并使用child的退出代码退出。现在
所以我重新安装了我的系统,但我在MSVC调试方面遇到了很大的问题。我可以毫无问题地编译我的应用程序。我已按照QTcreatorsettingupdebuggingwithCDB的说明进行操作在Windows7上。我安装了MSVisualStudio2010和更新我卸载了2010C++运行时。我安装了Windows调试工具和SDK。我还重新更新了2010运行时。完成这一切之后,我现在有了CDB调试器。C:\ProgramFiles\DebuggingToolsforWindows(x64)\cdb.exe在QT中它会自动检测cdb.exe,这就是我的工具包的样子。当尝试运行调试sessi
我正在尝试使用windbg分析故障转储,但根据加载的符号,我得到了不稳定的故障转储。我的简单理解是,符号只是帮助指向堆栈所指的内容,而堆栈本身并没有改变。这显然是错误的,但现在我不知道我到底在看什么。这是加载了所有符号的调用堆栈:0:000>kn#ChildEBPRetAddr000012e1207d61f60fntdll!ZwGetContextThread+0x12010012e130000f0005ntdll!RtlFreeHeap+0x711WARNING:FrameIPnotinanyknownmodule.Followingframesmaybewrong.020012e1
我正在windbg中调试一个x86DLL,特别是一个据称具有以下签名的函数:bool__cdeclfunc(LPVOIDp1,LPVOIDp2,wchar_t*p3,size_tp4,LPVOIDp5)函数未导出。AFAIK__cdecl应该接收堆栈上的所有参数,caller应该清除堆栈。但事实并非如此。Windbg说调用约定是__cdecl但前两个参数在ecx和edx上传递,就像__fastcall功能。此外,函数本身正在清除堆栈,(我认为)不应该由__cdecl函数完成。我试图Hook该函数但没有成功。我尝试将绕行函数设置为__cdecl和__fastcall并且都导致崩溃。有什么