我的应用程序在一段时间后崩溃,但我找不到任何模式。我能够得到崩溃转储。应用程序在 Windows Mobile 6.5 上运行。它是用 C# 编写的。它使用Imaging API、PInvoks 和大量线程。
当我使用 Visual Studio 2008 调试该转储时,在输出中显示“xxx.exe 中 0x782260ec 处的第一次机会异常:0xC0000005:访问冲突”
调用堆栈显示 2 个条目。但我无法匹配其中任何一个来从我的代码中调用。
Windbg.exe 表明此错误发生在“netcfagl3_5.dll”中
是否有一些特殊的技术来分析 Windows Mobile 的转储文件?
我正在创建一个多平台 Qt 应用程序,我希望崩溃报告系统能够在用户计算机发生崩溃时生成崩溃报告。稍后,我应该能够查看包含崩溃报告中所有调试信息的堆栈跟踪。我看过google-breakpad。
但是要使用它,我似乎需要为 Windows 切换到 MSVC。现在我在 Windows 上使用 MinGW,我需要花费大量的时间和精力来使用 MSVC 编译所有不同的库。有什么方法可以使用 MinGW 并且仍然可以使用 google-breakpad?或者是否有其他替代方案可以在多平台上工作并在 Windows 上支持 mingw?
我收到致命异常: NSRangeException *** -[__NSArrayM objectAtIndex:]: 索引 0 超出空数组范围
但是没有调用removeObjectAtIndex,并且这种情况发生在不同的视图控制器中。我只是在寻找关于在哪里查看的想法,因为在第 3-5 行中,应用程序被赋予了控制权,但没有符号。
崩溃日志来自 Fabric/crashlytics,仅在应用程序发布后大约 30 天发生,但崩溃的实例或数量是相关的。
Thread : Fatal Exception: NSRangeException
0 CoreFoundation 0x00000001830502d8 __exceptionPreprocess + 132
1 libobjc.A.dylib 0x00000001948740e4 objc_exception_throw + 60
2 CoreFoundation 0x0000000182f3385c -[__NSArrayM removeObjectAtIndex:]
3 AppName 0x00000001000875b8
4 AppName 0x000000010008698c
5 AppName 0x00000001000867c4
6 libdispatch.dylib 0x0000000194ec5994 _dispatch_call_block_and_release + 24
7 libdispatch.dylib 0x0000000194ec5954 _dispatch_client_callout + 16
8 libdispatch.dylib 0x0000000194eca20c _dispatch_main_queue_callback_4CF + 1608
9 CoreFoundation 0x00000001830077f8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
10 CoreFoundation 0x00000001830058a0 __CFRunLoopRun + 1492
11 CoreFoundation 0x0000000182f312d4 CFRunLoopRunSpecific …Run Code Online (Sandbox Code Playgroud) 我正在尝试诊断 .NET 4 应用程序的崩溃问题。上次它在用户机器上崩溃时,Windows 错误报告不会收集应用程序的小型转储。我检查了DumpFolder注册表,我可以找到旧崩溃的转储文件,但最后一个没有新的转储文件。
崩溃的事件日志说:
应用程序:MyApp.exe
框架版本:v4.0.30319
描述:由于 IP 000007FEEC0F25E8 (000007FEEC0B0000) 的 .NET 运行时出现内部错误,退出代码为 80131506,该进程被终止。
通过一些搜索看起来像是 CLR x64 中并发 GC 的一个著名错误。事件日志也不同于以前的崩溃。在之前的事件日志中,他们明确表示发生了“访问冲突”。退出代码是一样的。
我无法使用adplus或procdump获取故障转储,因为它们会显着降低性能。我想知道为什么这次 WER 没有得到 mini dump?
假设远程站点出现罕见错误但不会使应用程序崩溃。发生这种情况时,我仍然想创建一个小型转储文件,因此我有一些信息可以使用,主要是调用堆栈。
伪代码如下:
try
{
doStuff();
}
catch(_com_error &e)
{
make_minidump(); // is this possible?
dump_com_error(e);
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
我看到的所有示例都要求我必须导致应用程序崩溃(至少出于演示目的)以生成转储文件,但我不想这样做。是否可以创建这样的转储文件?
我知道我可以转到任务管理器并创建正在运行的进程的转储文件,同样我可以使用 ProcessExplorer 来实现相同的目的,所以看起来应该是可能的。
同时,在我看到的所有示例中,仅当控件涉及SetUnhandledExceptionFilter时才会生成转储文件,该控件在应用程序崩溃时被调用!
作为最后的手段,生成转储文件的唯一方法是故意使应用程序崩溃,如下所示:除了崩溃之外,这会产生任何有用的东西吗?因为我知道在这种情况下是什么导致了崩溃。
LONG CALLBACK unhandled_handler(EXCEPTION_POINTERS* e)
{
make_minidump(e);
return EXCEPTION_CONTINUE_SEARCH;
}
int main()
{
SetUnhandledExceptionFilter(unhandled_handler);
return *(int*)0;
}
Run Code Online (Sandbox Code Playgroud) 在分析崩溃报告时,我看到了一个Non UI我以前从未见过的角色。我试图了解它对应的应用程序的状态。
Hardware Model: iPhone7,2
Code Type: ARM-64 (Native)
Role: Non UI
Parent Process: launchd [1]
OS Version: iPhone OS 11.4 (15F79)
Report Version: 104
Run Code Online (Sandbox Code Playgroud)
在Role头文件中提到这里,它指向内核源代码。在源代码的最新可用版本(以及以前的版本)中,我看到了一个TASK_NONUI_APPLICATION枚举常量,但它没有记录。
已经有一个TASK_FOREGROUND_APPLICATION和一个TASK_BACKGROUND_APPLICATION常量,所以我不明白Non UI(或TASK_NONUI_APPLICATION)可以是什么。
有很多关于如何使用计算机访问崩溃报告的教程,但我希望我的应用程序在启动时扫描崩溃报告(来自其自身),以便用户可以使用我的应用程序向我发送报告.这可能吗?
是一个文档或地方,以查找有关在崩溃报告中导致_objc_msgSend_uncached的信息的信息?
关于崩溃的更多信息
libobjc.A.dylib 0x37e623cc _objc_inform
4 libobjc.A.dylib 0x37e616f2 _ZN7cache_t9bad_cacheEP11objc_objectP13objc_selectorP10objc_class
5 libobjc.A.dylib 0x37e61730 _ZN7cache_t4findEm
6 libobjc.A.dylib 0x37e617da cache_fill
7 libobjc.A.dylib 0x37e65890 lookUpImpOrForward
8 libobjc.A.dylib 0x37e5e02a _class_lookupMethodAndLoadCache3
9 libobjc.A.dylib 0x37e5ddf8 _objc_msgSend_uncached
10 MyApp 0x00253f5c -[AEEngine scanKeyframes:currentFrame:] in AEEngine.m on Line 256
11 MyApp 0x00256148 -[AEEngine doFrame] in AEEngine.m on Line 664
12 MyApp 0x00255f28 __31-[AEEngine doFrameInBackground]_block_invoke in AEEngine.m on Line 642
Run Code Online (Sandbox Code Playgroud)
得到了另一个类似的崩溃,看起来像这样,并以cache_t :: bad_cache结束
0 libobjc.A.dylib 0x37b44368 _objc_trap() + 0
1 libobjc.A.dylib 0x37b443c8 _objc_fatal + 68
2 libobjc.A.dylib 0x37b436ee cache_t::bad_cache(objc_object*, objc_selector*, objc_class*) …Run Code Online (Sandbox Code Playgroud) 我使C ++应用程序与WinDbg一起使用,并有意添加访问冲突运行时错误。
应用程序被编译为发布版本,然后将exe从发布文件夹复制到桌面。仍然当我使用WinDbg时,应用程序崩溃了,它打开了我的源代码文件,并显示了突出显示的错误行。
我无法理解,WinDbg如何理解我的源代码文件路径。
另外,当我从客户端进行故障转储时,可能是没有可用的源代码。所以我想模拟现实世界的场景。
问候
我正在做一些故障转储调试,我正在寻找从生产服务器获取的转储.我正在运行WinDbg的机器必须安装一个稍微不同的.NET运行时版本 - 我在加载.NET系统程序集的本机映像时出错(因此无法加载System.Data.Linq).
确保我的调试机器能够访问所有正确符号的最佳方法是什么?
编辑 为Thomas Weller添加的lmv输出
000007fb`68660000 000007fb`68993000 System_Data_Linq_ni C (pdb symbols) C:\Program Files\Debugging Tools for Windows (x64)\sym\System.Data.Linq.pdb\703A918D116A4558BB44245924371ACD1\System.Data.Linq.pdb
Loaded symbol image file: System.Data.Linq.ni.dll
Image path: C:\Windows\assembly\NativeImages_v4.0.30319_64\System.Data.Linq\acbd568cd3c2499fbb7b2639c4a46a81\System.Data.Linq.ni.dll
Image name: System.Data.Linq.ni.dll
Has CLR image header, track-debug-data flag not set
Timestamp: Fri Apr 11 20:41:26 2014 (534899C6)
CheckSum: 00000000
ImageSize: 00333000
File version: 4.0.30319.34209
Product version: 4.0.30319.34209
File flags: 0 (Mask 3F)
File OS: 4 Unknown Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
Run Code Online (Sandbox Code Playgroud)