Tag: windbg

起源不明的故障转储

我的应用程序崩溃跟随CallStack出错(来自WinDbg): ntdll!ZwWaitForMultipleObjects+0xa KERNELBASE!WaitForMultipleObjectsEx+0xe8 kernel32!WaitForMultipleObjectsExImplementation+0xb3 clr!WaitForMultipleObjectsEx_SO_TOLERANT+0x91 clr!Thread::DoAppropriateAptStateWait+0x56 clr!Thread::DoAppropriateWaitWorker+0x1b1 clr!Thread::DoAppropriateWait+0x73 clr!CLREvent::WaitEx+0xc1 clr!CLREventWaitWithTry+0x5c clr! ?? ::FNODOBFM::`string’+0x6286a clr!AssemblySecurityDescriptor::UpgradePEFileEvidenceToAssemblyEvidence+0x11d clr!Assembly::ExecuteMainMethod+0xcb clr!SystemDomain::ExecuteMainMethod+0x452 clr!ExecuteEXE+0x43 clr!CorExeMainInternal+0xc4 clr!CorExeMain+0x15 mscoreei!CorExeMain+0x41 mscoree!CorExeMain_Exported+0x57 kernel32!BaseThreadInitThunk+0xd ntdll!RtlUserThreadStart+0x1d 这是一个托管应用程序,根据WinDbg,有61个进程/线程从该应用程序运行。 在WinDbg中,当键入!threads时,它表示没有找到导出线程。 它没有说明是什么错误造成的(在Visual Studio 2010中,它表示NullReferenceException)。 我很疯狂,我认为这与USB串行控制器有关,但我把它放到另一个应用程序中,它仍然崩溃(尽管不像之前那样100%,而是80%)。 这个exception/错误完全没有我,我无法弄清楚如何解决它。 使用.loadby sos clr更新: 0:000> !threads ThreadCount: 23 UnstartedThread: 0 BackgroundThread: 17 PendingThread: 0 DeadThread: 4 Hosted Runtime: no PreEmptive Lock ID OSID ThreadOBJ State GC […]

请解释一下!SyncBlk windbg命令

首先,是否有一个命令来获取windbg每个sos命令的帮助和参数? 其次,我想了解!syncblk输出 Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 201 05b9493c 979 1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 2875 05b4c914 1 1 17b99e10 1af8 290 024862d8 MyClass 2945 05b4b66c 1 1 17d1a290 12c0 752 02482940 MyClass MonitorHeld显示MonitorHeld保持的监视器synblk 。 写入1和读取2,但列的其余部分是什么意思? 说我有一个C#代码 MyClass MyObj; MyObj = new MyClass(); 现在,如果我这样做 lock (MyObj) { } syncblk所有者列是否会显示“MyClass”? 同样当我运行这个!SyncBlk命令时,它究竟是什么向我展示? […]

Sos.dll和windbg抛出exception

我正在使用sos.dll和windbg来分析w3wp.exe转储。 在perfmon中显示了大量的每秒每秒抛出的.Net CLRexception,我正试图对此进行调查。 我试过做一个!dumpheap -stat -type Exception。 但这是否显示了我在转储的实例中抛出的exception,或者这是否显示了所有创建的exception对象实例? 可以在不抛出的情况下创建exception对象实例。 有没有办法获得抛出的exception?

使用WinDbg从minidump确定InnerException的行号

我正在尝试从转储中追踪NullReferenceException。 NullReferenceException不是崩溃exception,而是崩溃exception是TargetInvocationException,其InnerException是NullReferenceException。 我正在使用带有SOS的Windbg,我使用命令analyze -v ,这给了我NullReferenceException的调用堆栈: EXCEPTION_OBJECT: !pe f6cb150 Exception object: 000000000f6cb150 Exception type: System.NullReferenceException Message: Object reference not set to an instance of an object. InnerException: StackTrace (generated): SP IP Function 000000002CD9D8C0 000007FF01E7C639 MyDll!DoSomething2()+0xe99 000000002CD9DBE0 000007FF01E7B11D MyDll!DoSomething1()+0x43d 000000002CD9DD20 000007FF01E7AB11 MyDll!WorkerDoWork(System.Object, System.ComponentModel.DoWorkEventArgs)+0x51 000000002CD9DD80 000007FEEA68A0F2 System_ni!System.ComponentModel.BackgroundWorker.WorkerThreadStart(System.Object)+0x62 请注意,我得到了具有字节偏移的方法名称,但没有行号。 DoSomething2是一个很大的函数,所以NullReferenceException发生的地方并不明显。 我试图按照Tess Ferrandez博客中的说明操作: .Netexception – 跟踪代码中发生exception的位置 但是我很早就陷入困境,我尝试使用DoSomething2:7FF01E7C639的IP来确定方法DoSomething2的方法描述符!ip2md: > !ip2md 7FF01E7C639 […]

从C#引用64位dll时应用程序退出(无exception)

我编译了lzo2.dll 64位 ,现在希望在C#程序中使用它: 我正在使用以下类进行测试(类似的代码适用于32位lzo.dll): [DllImport(“lzo2.dll”)] private static extern string lzo_version_string(); static void Main(string[] args) { try { if (Environment.Is64BitProcess) { Console.WriteLine(lzo_version_string());//application exits here, no exceptions caught } } catch (Exception e) { Console.WriteLine(e); } Console.ReadLine(); } 在指示应用程序崩溃的时候,所以我拔出了windbg,这是输出:(抱歉冗长) 0:000> !analyze -v ******************************************************************************* * * * Exception Analysis * * * ******************************************************************************* *** WARNING: Unable to verify […]

如何让我的代码在崩溃前创建转储文件?

我在C#和C ++中有一些代码(在一个项目中)。 这段代码有一些崩溃,我试图找到它。 但这次崩溃不会在任何时候重现 – 我找不到它。 我想配置代码/ Windows操作系统来在崩溃时创建转储文件。 我所拥有的限制是……我对此崩溃重现的机器的访问权限有限 – 这不是开发机器..这是测试实验室机器 那么,怎么做呢? 如何在解决方案中更改新转储文件将在任何崩溃时创建的属性? (目的是能够分析windbg工具中的转储)

SOS不支持当前的目标体系结构

我正在尝试使用windbg来研究在x64机器上为我们的x86进程创建的挂起转储文件。 这是一个4.0 x86的应用程序,所以只是为了获得一个非托管堆栈,我必须执行以下操作: .loadby sos clr .load wow64exts !sw kL 但是,每次我尝试通过!clrstack获取托管堆栈时,我都会在标题中看到错误。 我错过了什么?

了解windbg的function和优点的最佳资源是什么?

了解windbg的function和优点的最佳资源是什么? 我希望能够讨论调查内存问题(句柄,对象),性能问题等。 。 。

调试winform崩溃 – C#

System.AccessViolationException was unhandled Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt. Source=System.Windows.Forms StackTrace: at System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at ABC.Program.Main() […]

.NET线程如何等待不属于任何线程的syncblk?

我的应用程序中有一个崩溃转储显示了一堆等待syncblk的线程,而syncblk显示它没有拥有线程。 怎么可能? 我试图重现测试应用程序中的症状,我无法弄清楚产生该结果可能发生什么….拥有拥有线程退出或死亡而不释放syncblk仍显示为拥有该对象,只是线程是“XXX”….我已经测试使用完全管理的优雅退出和硬线程终止通过pinvoke ….我测试了一堆不同的等待组合没有脉冲,不匹配进入和退出…什么都没有产生一个syncblk阻止线程,并没有显示所有者…..我的想法已经用完了 这是我正在尝试复制的crashdump的输出:(注意索引#1236) 0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 784 0000000004f12eb0 3 1 000000000508a460 32a8 68 00000001a0a20510 966 0000000004f06928 1 1 00000000052c5da0 2380 114 00000001df3080f8 1085 0000000004f23088 1 1 00000000052c8080 496c 120 00000001a0325238 1144 0000000005160d20 1 1 00000000050968b0 d74 56 00000000ff61b570 1151 0000000004f0c2c8 1 1 000000000508d8b0 3f64 77 […]