请教如何生成程序的崩溃日志
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,它是系统自带的错误处理工具,但是集成在自己的程序里该如何做呢?
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.log
和 system.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.log
和system.log
。
也直接在CoreSimulator
下,见CoreSimulator.log
和Simulator.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)
【讨论】:
以上是关于请教如何生成程序的崩溃日志的主要内容,如果未能解决你的问题,请参考以下文章