请教如何生成程序的崩溃日志

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教如何生成程序的崩溃日志相关的知识,希望对你有一定的参考价值。

请教如何生成程序的崩溃日志
某游戏服务端程序崩溃时生成如下的详细崩溃日志:

//=====================================================
Exception code: C0000005 ACCESS_VIOLATION
Fault address: 0x地址

Registers:
EAX:0000A078
EBX:3B077928
ECX:0000A078
EDX:3B5AAE08
ESI:00000000
EDI:00000000
CS:EIP:001B:003757EE
SS:ESP:0023:0E7AFB68 EBP:0E7AFB6C
DS:0023 ES:0023 FS:003B GS:0000
Flags:00010206

Call stack:
Address Frame Function SourceFile
地址1 0E7AFB6C 函数+偏移
地址2 0E7AFC48 0001:00031963 目标程序全路径
地址3 0E7AFDDC 0001:00015143 目标程序全路径
地址4 0E7AFE10 0001:00014C60 目标程序全路径
地址5 0E7AFE94 0001:00058E06 目标程序全路径

这样的功能我在使用Delphi的控件EurekaLog v6.0.3的时候使用过,但是自己该如何去实现呢?
一个朋友告诉我用 Dr. waston,它是系统自带的错误处理工具,但是集成在自己的程序里该如何做呢?

参考技术A 这个没弄过,帮你顶下,期待高手来回答。

iPhone模拟器生成的崩溃日志?

【中文标题】iPhone模拟器生成的崩溃日志?【英文标题】:Crash logs generated by iPhone Simulator? 【发布时间】:2010-12-24 06:47:31 【问题描述】:

iPhone Simulator 是否有任何崩溃日志?

模拟器经常崩溃,但在控制台中没有留下任何痕迹...崩溃日志将很有用。

【问题讨论】:

我不太明白您为什么需要崩溃日志。当模拟器中的应用程序崩溃但在您停止调试之前,在 gdb 提示符处键入“bt”作为“回溯”——您将得到崩溃日志中出现的确切内容。 (没有意识到这里有问题死灵,错过了发布年份) 如果崩溃仅在调试器未附加您时发生,那么您将需要日志。 你是对的。这是有道理的! 您还可以在 Xcode (cmd-8) 的“Report navigator”中查看调试日志(包括 lldb 命令的输出)。这对于查看以前运行的调试输出也很有用。如果没有附加调试器,那么这显然不会起作用。 调试日志与崩溃日志不同,尽管这两个日志都对调试问题很有用。 【参考方案1】:

我很确定您可以在位于实用工具中的 OS X 控制台应用程序中看到这一点。如果我错了,请务必投票给我,所以我删除了这个。


更新:

具体来说(从 OSX 10.11.6 开始),

当应用程序在模拟器上崩溃时,会添加一个子文件夹(具有唯一 ID):

~/Library/Logs/CoreSimulator

在此范围内,首先检查 stderr.logsystem.log

当模拟器本身崩溃时,会添加一个子文件夹:

~/Library/Logs/DiagnosticReports

不要将此路径与

混淆

/库/日志

(在开始时缺少~),它有关于你的mac的不同报告。

【讨论】:

是的。更多信息在这里developer.apple.com/iphone/library/documentation/Xcode/… 似乎只适用于iPhone设备,而不适用于模拟器。如果我错了,请纠正我。 控制台可以通过按 Cmd-/ 或使用 Debug/Open System Log... 菜单选项从模拟器中打开。【参考方案2】:

控制台将显示模拟器中运行的应用程序的NSLog() 输出。崩溃日志保存到文件中。

我在我的主目录下找到了一些

~/Library/Logs/DiagnosticReports/

他们的文件扩展名为.crash

我还没有弄清楚即使调试器抓取EXC_BAD_ACCESS 信号,如何让它们生成。


更新

目前,(OSX 10.11.6),~/Library/Logs/DiagnosticReports 中的 .crash 日志是模拟器本身崩溃的时间app 崩溃的日志(但模拟器设备仍然运行良好)位于:

~/Library/Logs/CoreSimulator

每次崩溃,都有一个具有唯一 ID 的子文件夹。按日期排序,以便您最近的崩溃是第一个子文件夹。在其中,首先查看stderr.logsystem.log

也直接在CoreSimulator 下,见CoreSimulator.logSimulator.log

【讨论】:

知道为什么这些日志被写入文件而不是显示在控制台中吗?谢谢你的信息,顺便说一句。 我在 iPhone 或 iPad 模拟器中的崩溃报告都没有出现在这个目录下,也许这个答案需要更新? 也许它确实需要更新,但投反对票并不是鼓励它的一种非常礼貌的方式。 我在上述目录中找到了崩溃报告,但只有一份报告,而且不是最新的(即,我一直在应用程序中尝试一些事情,但它一直在崩溃)。崩溃都是一样的,所以这不是问题,但我想知道这是否通常是这种情况? Justin 和 ohhorob 都是正确的。您需要在没有 Xcode 的情况下在模拟器上启动应用程序并重现崩溃以查看 ~/Library/Logs/DiagnosticReports/ 中的日志【参考方案3】:

这更可靠。只需几个步骤,我就能找到源代码行号和方法名称:

    cd 到包含 .app 和 .dSYM 文件的目录 运行 /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp 设置打印 asm-demangle 开启 设置打印符号文件名 p/a 0×00015c64 -> 在“控制台”应用中打开崩溃日志或双击 .crash 文件获得的地址。

【讨论】:

我不太明白您为什么需要崩溃日志。当模拟器中的应用程序崩溃但在您停止调试之前,在 gdb 提示符处输入“bt”作为“backtrace”——您将得到崩溃日志中出现的确切内容。 此方法适用于客户端手机的崩溃日志。【参考方案4】:

这是在特殊情况下对我有用的东西...我的应用程序在终止时因 SIGKILL 而崩溃。我会在 main.m 中看到异常几秒钟,然后应用程序将完成终止——因此,没有机会获得回溯。

我在“模拟器将其崩溃日志存储在哪里”进行了大量搜索,但从未找到答案。然而,下面的技巧派上用场了,我能够即时获取崩溃日志:

基本上,打开 /Applications/Utilities/CrashReporterPrefs.app 并将设置更改为“开发人员”。这将导致 CrashReporter 在您的应用崩溃后显示一个包含崩溃日志的弹出窗口。

我在 Apple 的此文档的“查看 iOS 模拟器控制台和崩溃日志”部分中找到了这一点: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application.html

【讨论】:

顺便说一句,我正在研究的 SIGKILL 的原始问题原来不是问题:***.com/questions/7901262/… 我应该指出 Application/Utilities 中没有 CrashReporterPrefs 应用程序,但是我搜索它并能够在其他地方找到该应用程序。 @Justin 你在哪里找到的? 请注意,上面提到的工具可以从 Xcode 下载到一个名为“Xcode 的附加工具”developer.apple.com/download/more/…【参考方案5】:

崩溃崩溃日志将出现在 ~/Library/Logs/CrashReporter 下。

如果 iPhone 模拟器程序崩溃(不是在模拟器中运行的 iPhone 应用程序),那么将有一个 iPhoneSimulator 条目。 如果模拟器中的 iPhone 应用程序崩溃,崩溃日志将显示应用程序的显示名称。

当 Xcode 从连接的设备获取崩溃日志时,它会将它们存储在 ~/Library/Logs/CrashReporter/MobileDevice 的子文件夹中

【讨论】:

这是一年多之后,但我看到“模拟器中的应用程序”在 ~/Library/Logs/DiagnosticReports 崩溃......它看起来像:MobileSafari_2013-03-21-155844_My-MacBook- Pro.crash【参考方案6】:

对我来说,这是我添加到调试器监视窗口中的表达式。当断点被命中时,错误的表达式导致 XCode 出现段错误。

【讨论】:

【参考方案7】:

您可能还想看看这个相关的答案:https://***.com/a/14984297/679240

以上答案均不适用于“Big Sur”操作系统版本。找到日志的唯一方法是通过“控制台”应用程序(Application/Utilities/Console)

【讨论】:

以上是关于请教如何生成程序的崩溃日志的主要内容,如果未能解决你的问题,请参考以下文章

iOS 查看崩溃日志与符号化

苹果手机崩溃日志怎么看

如何获取在 chromecast 设备上崩溃的 Receiver 应用程序的崩溃日志?

如何让 QT 应用程序写入崩溃日志

如何调试此崩溃日志

我可以强制生成 JVM 崩溃日志文件吗?