问题标签 [crash-dumps]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1239 浏览

debugging - 有没有办法知道另一个引发异常的进程中的线程ID?

我正在尝试使用 MiniDumpWriteDump() API 从另一个进程 A 转储崩溃的进程 B。我这样做是因为MSDN这么说:

如果可能的话,应该从一个单独的进程调用 MiniDumpWriteDump,而不是从被转储的目标进程中调用。

MiniDumpWriteDump() 定义如下:

特别是 ExceptionParam 的类型为PMINIDUMP_EXCEPTION_INFORMATION,其定义如下:

现在我想知道如何准备以下2个参数:

ThreadId 抛出异常的线程的标识符。

ExceptionPointers 指向 EXCEPTION_POINTERS 结构的指针,该结构指定了与计算机无关的异常描述和异常发生时的处理器上下文。

在进程 A 中运行时,如何获取进程 B 中的错误线程 ID 和异常指针?

谢谢。

0 投票
1 回答
1302 浏览

iphone - iOS应用程序无法恢复如何解决?

我不知道要解决这个问题,知道吗?

0 投票
5 回答
8419 浏览

asp.net - Asp.net 应用程序速度慢,但 CPU 最高为 40%

我在生产服务器上有一个奇怪的情况。asp.net 的连接已排队,但 CPU 仅占 40%。此外,数据库在 30% 的 CPU 下运行良好。

评论中要求的更多历史记录:

  • 在高峰时段,这些网站每小时约有 20,000 名访问者。
  • 该站点是一个带有大量 AJAX/POST 的 asp.net 网络表单应用程序
  • 该网站使用大量用户生成的内容
  • 我们使用一个测试页面来衡量网站的性能,该页面确实会命中数据库和网站使用的 Web 服务。此页面在正常负载下会在一秒钟内提供服务。当请求超过 4 秒时,将应用程序定义为慢。
  • 从测量中我们可以看到连接时间很快,但处理时间很大。
  • 我们无法确定单个请求的缓慢响应,该站点在正常时间运行良好,但在高峰时间变慢
  • 我们有一个问题是该站点受 CPU 限制(也就是以 100% 运行),我们修复了该问题
  • 我们还遇到了导致 appdomain 重新启动的异常问题,我们修复了这个问题
  • 在高峰时段,我会查看 asp.net 性能计数器。我们可以看到我们有 600 个当前连接和 500 个排队连接的行为。
  • 在高峰时间,CPU 大约是 40%(这让我认为它不受 CPU 限制)
  • 物理内存使用率约为 60%
  • 在高峰期,DatabaseServer CPU 大约是 30%(这让我觉得它不受数据库限制)

我的结论是,其他东西正在阻止服务器更快地处理请求。可能的嫌疑人

  • 死锁(!syncblk 只提供一个锁)
  • 磁盘 I/O(通过 sysinternals procesexplorer 检查:3.5 mB/s)
  • 垃圾收集(高峰期 10~15%)
  • 网络 I/O(连接时间仍然很短)

为了找出过程在做什么,我创建了小型转储。

我设法创建了两个相隔 20 秒的 MemoryDump。这是第一个的输出:

和第二个的输出:

如您所见,队列中有很多请求。

问题1:队列中有1589个请求是什么意思。这是否意味着有东西阻塞?

!threadpool 列表主要包含以下条目: Unknown Function: 6a2aa293 Context: 01cd1558 AsyncTimerCallbackCompletion TimerInfo@023a2cb0

如果我深入了解 AsyncTimerCallbackCompletion

然后我查看 TimerCallback 中的对象,其中大多数是类型:

问题 2:这些对象有一个计时器是否有意义?我是否应该阻止这种情况。如何?

主要问题我是否错过了任何明显的问题,为什么我要排队连接而不是最大化 CPU?


我成功地在高峰期进行了崩溃转储。用 debugdiag 分析它给了我这个警告:

快速谷歌搜索没有给我任何结果。有人有线索吗?

0 投票
2 回答
1379 浏览

arm - 程序计数器的零值

程序计数器 (PC) 具有当前正在执行的指令或行中的下一条指令的地址。对于 ARMV5,它是前一种情况。

我遇到了 PC (R15) 值为零的崩溃。我想知道是否有人可以告诉我它的重要性。是否有某种方法(其他一些寄存器)来找出当前指令的地址。

任何帮助将不胜感激。

0 投票
1 回答
712 浏览

crash - 如何禁用所有 Windows 崩溃处理程序,如 DrWatson 等

我正在开发一个单元测试自动执行应用程序,我需要在一个应用程序崩溃时不出现对话框。崩溃转储会很棒,但主要要求是不显示任何对话框,因为我正在自动执行并且我不会自动执行这些对话框。

我已禁用 Windows 错误报告,但唯一的变化是没有发送选项的不同对话框。

有任何想法吗?

谢谢。

0 投票
3 回答
4151 浏览

c++ - 调用指令上的 C++ 程序崩溃(C0000005 访问冲突)

我有一个让我困惑的崩溃,到目前为止,我发现不可能始终如一地重现。代码使用 Visual Studio 2008 编译。

(当然是简化的)源代码如下所示:

崩溃转储的反汇编如下所示:

将 func() 的源映射到反汇编,它最终看起来像这样:

在成功运行中(不同的机器,即使在同一台机器上,崩溃也不能可靠地重现),反汇编的唯一区别是调用指令,它最终正确映射到 ChildClass 的默认构造函数的地址,如这个:

而不是喜欢:

因此,在崩溃运行中,用作调用指令参数的 a06cff10 地址似乎来自谁知道在哪里,并且没有特别映射到任何东西。因此,可以预见的是,尝试访问该地址(以访问 ChildClass 默认构造函数)会导致访问冲突:

任何在故障转储中查看该地址的尝试确实表明该地址超出了进程的范围。

更新:因此,在阅读了来自 zvrba 的以下响应并进一步查看之后,有问题的调用似乎是静态库中的十几个函数调用中的第一个(这又是由 DLL 加载的),它们都有一个不正确的函数偏移。它们不是同一类中的所有功能。尽管所有类(调用和被调用的)都存在于同一个静态库中,但有三四个不同的类的功能受到影响。在第一个崩溃的调用中,指令是 e8e053403f 并且该指令中的 3F4053E0 偏移量应该偏移量仅为 53E0。所有其他实例都有相同的偏移问题。指令中的偏移量是 3F40XXXX,应该是 XXXX。额外的 3F400000 当然是将东西送到 Never Never Land。到目前为止,我还没有找到关于反汇编中的哪些函数地址有效以及哪些无效的模式。库中 DifferentClass 的一个成员函数将对 ChildClass 的所有调用都视为错误,而另一个成员函数 DifferentClass 将对 ChildClass 进行不同的调用看起来很好。

有没有人看到过这样的事情/对可能的原因有任何想法?

0 投票
1 回答
619 浏览

ios - 调试 iOS 即席崩溃报告:

我的一个用户给我发了一堆崩溃日志,其中大多数是这样的——

这对我来说真的没有任何意义,我是否遗漏了一些非常明显的东西?

谢谢,
泰加。

0 投票
6 回答
449 浏览

c++ - 什么是创建用于反映崩溃原因的崩溃报告 Win32 C++ 的字符串的好方法?

我们使用 Fogbugz 来跟踪问题,我正在为 Fogbugz 编写一个围绕 XML API的 C++ 包装器。

最佳实践似乎是使用“侦察”字段,以便仅计算类似/相同的崩溃但不再报告。为此,我们需要一个用于特定崩溃原因的唯一字符串。

在 Win32 中 - 在获取 dmp 文件或其他崩溃处理程序之后,为崩溃创建唯一字符串的好方法是什么?(我们将创建一个 dmp 文件并将其发送到fogbugz 服务器)

在以前的帖子/文章/等中,Joel 提出了各种建议,但其中大部分都依赖于像 C# 这样的语言,它使用反射并且有很多难以获得或不可能获得的信息。

有没有其他人得到诸如堆栈跟踪或其他东西来在fogbugz中制作侦察条目?

编辑澄清 - 我们不希望每个事件都有一个唯一的 ID - 可能存在具有相同代码路径的崩溃。我们想要捕捉到这一点。我在想我们会得到我们代码中的最后几个堆栈调用(不是来自 win32 DLL 的堆栈调用) - 但不知道如何去做。

将每次崩溃都报告为唯一是不正确的。报告同一案例下的所有崩溃是不对的。重复导致崩溃的场景的不同用户应映射到同一事件。

编辑

我认为我们想要的是崩溃的一般“签名”——基于堆栈上的内容。类似的堆栈应该具有​​相同的签名。例如 - 采用我们应用程序中的前 5 个方法,然后我们将第一个调用(如果有)放入 MS DLL。这对于签名可能就足够了,并且可能会关联“相同”的崩溃。

那么如何获得堆栈上的方法列表呢?您如何判断它们是来自您自己的应用程序还是来自另一个 DLL?

编辑 - 注意我们想在异常处理程序中创建一个“桶 id”/签名,以便我们可以创建小型转储并将其作为侦察描述发送到雾虫。或者,我们可以在应用程序下一次启动时加载转储,然后使用我们生成的签名发送它。

0 投票
2 回答
3498 浏览

.net-4.0 - w3wp.exe 崩溃 - ThreadAbortException

我们有一个无法重现的问题,它随机发生在我们运行 ASP.NET 4 的 Web 服务器(Windows Server 2008 Datacenter 64 位,托管在 Amazon EC2 上)上。

它以错误日志中的 ASP.NET 警告开头(一个带有很长 URL 的奇怪 GET 请求):

异常信息:
异常类型:HttpException
异常消息:此请求的 URL 长度超过了配置的 maxUrlLength 值。
在 System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
在 System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext 上下文)

然后出现错误:

应用程序 ID:/LM/W3SVC/2/ROOT
进程 ID:4604
异常:System.Threading.ThreadAbortException
消息:线程被中止。
StackTrace:在 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR, HttpContext context)
在 System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
在 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (IntPtr managedHttpContext、IntPtr nativeRequestContext、IntPtr moduleData、Int32 标志)

然后另一个错误:

应用程序 ID:DefaultDomain
进程 ID:4604
异常:System.Threading.ThreadAbortException
消息:线程被中止。
堆栈跟踪:

然后是应用程序错误:

错误应用程序 w3wp.exe,版本 7.0.6002.18005,时间戳 0x49e03238,错误模块 kernel32.dll,版本 6.0.6002.18005,时间戳 0x49e041d1,异常代码 0xe0434352,错误偏移量 0x00000000000176fd,进程 id 0x%x,应用程序启动时间 0%10x%x .

Windbg

我设法得到一个与 adplus 崩溃的转储,但我真的不知道要寻找什么。我之前用 Windbg 对一些 stackoverflow 进行了故障排除,但我不知道该错误使用哪种方法。

!pe 在出现错误的线程上:

异常对象:00000001c323d948
异常类型:System.Threading.ThreadAbortException
消息:线程被中止。
InnerException:
StackTrace(生成):

StackTraceString:
HResult:80131530

!clrstack

子 SP IP 呼叫站点
0000000015f7f078 0000000076c176fd [GCFrame: 0000000015f7f078]
0000000015f7f258 0000000076c176fd [GCFrame: 0000000015f7f258]

ķ

Child-SP RetAddr Call Site
00000000 15f7edf0 000007fef2826e39 kernel32!RaiseException+0x39
00000000 15f7eec0 000007fef2bbbfb4 clr!RaiseTheExceptionInternalOnly+0x363
00000000 15f7eff0 000007fef2bbc906 clr!RaiseTheException+0xa4
00000000 15f7f020 000007fef2c3b99b clr!BStrFromString+0x66
00000000 15f7f050 000007fef2c3b9a9 clr!RealCOMPlusThrow+0x3b
00000000 15f7f0c0 000007fef2c93156 clr!RealCOMPlusThrow+0x9
00000000 15f7f0f0 000007fef2b229f3 clr!Thread::RaiseCrossContextException+0x2a7
00000000 15f7f310 000007fef2830886 clr! ?? ::FNODOBFM:: 15f7f4c0 000007fe 15f7f530 000007fe 15f7f5c0 000007fe 15f7f5f0 000007fe 15f7f620 000007fe 15f7f6d0 000007festring'+0xafb03
00000000
f27fcce3 clr!UM2MDoADCallBack+0x9e
00000000
f845ba59 clr!UMThunkStubAMD64+0x273
00000000
f8458f02 webengine4!W3_MGD_HANDLER::ProcessNotification+0x79
00000000
f27d4595 webengine4!ProcessNotificationCallback+0x43
00000000
f27d3ac8 clr!UnManagedPerAppDomainTPCount::DispatchWorkItem+0x181
00000000
f294658f clr!ThreadpoolMgr::NewWorkerThreadStart+0x2e5
00000000
15f7f770 000007fe 15f7f810 00000000 15f7fbd0 00000000 15f7fc00 00000000`00000000 ntdll!RtlUserThreadStart+0x1d f29447c6 clr!ThreadpoolMgr::WorkerThreadStart+0x3b
00000000
76c1be3d clr!Thread::intermediateThreadProc+0x7d
00000000
76d56a51 kernel32!BaseThreadInitThunk+0xd
00000000

有人知道这可能是什么吗?或者可以指出我用Windbg分析它的正确方向吗?

Edit: The incoming urls usually looks like this: foo.bar.com/wEPDwULLTE1MTk5MzIzMTFkGAMFFmN0bDAwJGRiMSRkZGxEYXRhYmFzZXMPFCsAAmRkZAU7Y3RsMDAkU2VhcmNoQ2xvdWQxJF9SaWdodENvbHVtbiRfU2VhcmNoQ2xvdWQkbHN2U2VhcmNoVGVybXMPFCsADmRkZGRkZGQ8KwAUAAIUZGRkZgL/D2QFK2N0bDAwJHN1cnZleTEkX1JpZ2h0Q29sdW1uJF9JUiR1c2VyQ29tbWVudHMPFCsAA2VnZGQeuUcvQDsShDIp1k7YjJw70Ry 9/Q1B9Sd1egrovYgkw==/

但我在事件日志中发现,这样的 url 也会发生这种情况: foo.bar.com/& ("dan​​gerous request" in .NET 4)

0 投票
3 回答
52404 浏览

c# - 在 Visual Studio 中调试转储文件

我正在使用 Visual Studio 2010 专业版和 Windows Vista。

首先,我有这个代码。如您所见,它将使程序崩溃!

程序将在 if 语句上崩溃。现在,我想知道它在那个 if 语句上崩溃了。

如果我从 Visual Studio 中“不调试就开始”,Crash.exe 会崩溃。它使用 1,356kb 的内存。我得到关闭程序/调试的 Vista 选项。如果我选择调试,我可以打开一个新的 Visual Studio 实例,它会将我指向 if 语句中的 NullReferenceException。这很好。

现在让我假设它在另一台计算机上崩溃,我让他们通过任务管理器给我一个转储文件。它是 54,567kb。为什么这么大!很广阔!反正我对那个不太感兴趣(略)

如果我用 Windbg 打开那个转储,我对未经训练的眼睛几乎没有用处:

然而,这对我来说不太感兴趣。据我所知,我需要编写命令以获得有用的输出,而 Visual Studio 更好。

所以我用 Visual Studio 打开它。我可以选择“仅使用 Native 进行调试”,但我得到了很多对像你这样聪明的人有意义的东西,而我并不聪明!我得到这两个屏幕:

在此处输入图像描述

在此处输入图像描述

所以,我的问题:

如何向我的源代码显示 Visual Studio?

另外,有没有办法获得更小的转储文件?它看起来大得离谱,即使在压缩之后也是如此。我不明白为什么不能有一个只比程序的占用空间大一点点,并且仍然可以通过源代码进行很好的调试。