iOS crash崩溃日志符号化方法

iOS之crash分析篇--符号化 长话短说就是将运行时信息转换成源码信息,符号化是一种机制,将我们在设备运行时App的内存地址和关联的指令信息转换成源码文件中具体的文件名、方法名、行数等。可以理解将运行时机器如何“读”App,转换成开发者如何“读”App。如果缺少这层转换,哪怕几行代码的App,bug定位也变得难以进行。Xcode编译项目后,会生成一个同名的dSYM文件。dSYM是保存16进制函数地址映射信息的文件,每次编译项目的时候会生成一个新的dSYM文件。iOS设备中会有日志文件保存每个应用出错的函数内存地址,通过Xcode的Orga 阅读详情

一、atos符号化。

atos符号化的关键主要是:找到崩溃日志的UUID,相对地址和绝对地址。这里以百度统计为例(百度官方也有提供手动解析的方法,但是文档不是很详细,我试了没有成功,暂不清楚是哪步搞错了。以下是我结合网上教程总结出来的方法,亲测有效)。

1、分析错误日志。

在百度统计平台找到错误信息,百度已经将UUID和相对地址给我们标记好了。如图,找到UUID、相对地址、绝对地址:

注意:绝对地址要你的app名称后面的才有用,这里我的app名称为WHBJ。

2、找到提交app时使用的.xcarchive文件和.dSYM文件(以下appName为你的项目名称)。

在XCode -> Window -> orgnizer打开archive界面,找到对应的archive包,右键 -> show in finder -> 显示包内容,找到dSYMs文件,里面可能包含好几个.dSYM文件,其中一个名为appName.app.dSYM,其它均为UUID.dSYM,找到UUID为B472A07C-A09E-3798-98B1-FF137B3D0CF5的.dSYM文件,显示包内容 -> Contents -> Resources -> DWARF,找到appName文件。

3、终端查看详细日志信息。

打开终端,输入xcrun atos -arch arm64 -o appName文件路径 -l 相对路径 绝对路径

回车就可以查看详细信息了,如下图:

运行结果:-[YLfilterView updateAddress] (in WHBJ) (YLfilterView.m:334),含类名,方法名和行数。

4、注意事项。

如果找不到对应UUID的文件,则在终端 cd 到dSYMs文件夹,输入dwarfdump --uuid AppName.app.dSYM 查看AppName.app.dSYM的UUID是否与百度统计一致,一致则用这个文件解析,解析方法同上。

代码收集的崩溃信息没有直接显示相对地址信息,需要自己去计算。如图:

 系统收集崩溃信息中也有直接显示UUID,相对路径和绝对路径。如图: 

 

系统日志的查看方式有如下三种:

  1. Xcode -> Window -> Organize -> Crashes中查看。
  2. Xcode -> Window -> Device and Simulators -> 选中设备 -> View Device Logs。
  3. 用户手机设置 -> 隐私 -> 分析与改进 -> 分析数据里查看。

 二、symbolicatecrash符号化(iOS14及以下可用)。

首先我们需要找到symbolicatecrash文件:

// 该文件一般在该路径下
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

// 如果在上面路径找不到的话可以通过命令进行查找。
find /Applications/Xcode.app -name symbolicatecrash -type f

将symbolicatecrash文件、dsym文件、crash文件分别复制到一个文件夹下面。然后cd到新建的文件夹内,使用命令进行符号化,如:

// cd到新建的文件夹内
cd xxx

// 使用命令进行符号化
./symbolicatecrash [crash文件或ips文件] [dSYM文件] > [符号化后的新文件名称.crash]

// 例如
./symbolicatecrash ErrorTest.crash ErrorTest.app.dSYM > newCrash.crash

如果执行命令报错:

Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 75.

// 需要设置环境变量
export DEVELOPER_DIR="/Applications/XCode.App/Contents/Developer"
No crash report version in [文件名].crash at ./symbolicatecrash line 1371.

// 该崩溃信息可能需要使用 CrashSymbolicator.py 进行解析

三、CrashSymbolicator.py符号化(iOS15及以上可用)。

该方式与symbolicatecrash方式类似,首先需要找到CrashSymbolicator.py文件:

# 该文件一般在该路径下
/Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py

# 如果在上面路径找不到的话可以通过命令进行查找。
find /Applications/Xcode.app -name CrashSymbolicator -type f

在找到该文件后不要将它copy到其他文件夹内,否则会出现找不到头文件的问题。

# 执行命令
python3 [CrashSymbolicator.py文件路径] -d [dSYM文件路径] -o [符号化后的新文件名称.ips] -p [崩溃信息ips文件路径]

# 例如
python3 /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py -d /Users/kenan/Desktop/15.0.2/ErrorDemo.app.dSYM -o newCrash.ips -p /Users/kenan/Desktop/15.0.2/ErrorDemo.ips

参考:

1、iOS线上崩溃追踪​​​​​​​。

2、iOS 崩溃日志符号化​​​​​​​。

iOS之ips日志解析 一、导出ips文件 途径一: 手机连接Xcode查看和导出 Xcode -> Window -> Devices and Simulators -> View Device Logs 途径二: 直接在手机上导出,设置-隐私-分析-分析数据-找出对应时间点的ips文件 二、导出dSYM 1、Xcode -> Window -> Organizer -> 找到对应的包,Show in Finder 显示包内容,最终找到相应的dSYM 2、如果没有找到相应的dS 阅读详情

相关推荐

iOS奔溃分析技巧-crash日志符号化

前言 iOS开发需要不停发版本,开发者要面临线上各种版本的奔溃日志(crash log),解决奔溃问题是移动开发者最日常的工作之一. 在实际的项目开发中,崩溃问题,依赖xcode,依赖于系统记录的崩溃日志或错误堆栈,在本地开发调试阶段,是没有问题的。 如果在发布的线上版本出现崩溃问题,开发者是无法即时准确的取得错误堆栈的,需要获取到crash日志,进行相应处理。 简单的崩溃还好说,复杂的崩...

代码手工艺术家的专栏 2344

iOS通过dSYM文件分析crash

http://blog.youkuaiyun.com/hjy_x/article/details/20929095 我们在ios开发中会碰到的很多crash问题,如果Debug调试模式的话,我们可以往往很容易的根据log的输出定位到导致crash的原因,但对于已经上线的应用,或者是release环境包导致的crash,我们就需要一些特殊的手段来通过crash log进行分析定位了。 通

openglnewbee的博客 3万+

iOS小技能:iOS15崩溃排查技巧(symbolicatecrash符号化分析问题、导出和隐藏符号)

场景:用户在机器1上用 Xcode 将 App 工程(存放于本机文件路径1)布署到 iPhone 上,然后在机器2上用 Xcode 打开文件路径2的工程,然后 Attach 到 iPhone 上的 App 进程,这时 Xcode 因为找不到文件路径1所以无法显示源代码,这时 Xcode 只能展示汇编代码。在macho文件中的_DATA数据段中有很多objc的节信息,里面保存了所有的类以及方法等元数据信息。机器1上的文件路径1和机器2上的文件路径2应该包含相同版本的源文件,否则调试时会显示异常。

专注于计算机研发知识和资讯分享 1336

iOS_Crash 一:文件的获取及符号化(解析)

解析 iOS app crash 文件教程

mikimo的博客 4726

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 429

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

本文详细介绍了如何在 Android 项目中集成 espeak-ng,实现中文离线语音播报。通过下载 so 库、编写 Java 接口、封装管理类,开发者可快速构建无需账号的 TTS 功能。文章覆盖从零到一的开发步骤、调试技巧及性能优化,适合中高级 Android 开发者参考。

全栈 3316

iOS Crash 日志分析

未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了。所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字。这一步我们称之为符号化。符号化的两种方式: 1.利用Xcode符号化 2.利用symbolicatecrash脚本符号化其实这两种分析方式都使用了同一个工具符号化:atos。 atos是苹果提供的符号化工具,在Mac OS系统下默认安装。 使用atos符号化需要dsym文

路过不曾停留,但求手留余香 772

Tesseract OCR识别不准?手把手教你用PyAutoGUI提升自动点击脚本的准确率

本文针对Tesseract OCR在屏幕自动化中识别不准的问题,提供了一套完整的优化方案。通过PyAutoGUI精准截图、结合PIL和OpenCV进行图像预处理(如灰度化、对比度增强、自适应二值化),并调优Tesseract参数(如PSM模式、白名单),显著提升文本识别准确率。文章还介绍了结合模板匹配、构建容错循环等进阶技巧,帮助开发者打造高可靠性的自动点击脚本。

weixin_29093017的博客 543

如何使用dSYM文件来符号化崩溃信息

iOS崩溃日志符号化摘要:本文介绍了如何将不可读的崩溃堆栈信息转换为可读格式。主要内容包括:1)符号化必要性,原始崩溃日志难以定位问题;2)获取dSYM文件的方法,包括调试环境配置和从ipa包提取;3)手动分析.crash文件,展示了崩溃日志结构。通过dSYM文件中的地址映射关系,可将十六进制地址转换为具体的函数名和行号,帮助开发者快速定位崩溃原因。文中详细说明了Xcode配置、命令行工具使用及日志分析方法。

chaoyuan899的专栏 1071

给麒麟KylinOS服务器加把锁:手把手配置符合等保要求的密码强度策略

本文详细介绍了如何在麒麟KylinOS服务器上配置符合等保要求的密码强度策略,包括pwquality.conf和login.defs的核心参数设置、等保合规的进阶配置技巧以及企业环境中的平衡艺术。通过实战案例和测试方法,帮助管理员构建坚固的密码防线,确保系统安全。

weixin_33749242的博客 417

基于Simulink的永磁同步电机三闭环(位置/速度/电流)伺服仿真

本文详细介绍了基于Simulink的永磁同步电机三闭环伺服控制系统的设计与实现,针对机器人关节控制场景。系统采用位置环(外环)、速度环(中环)和电流环(内环)的嵌套结构,通过精确的带宽匹配(电流环1kHz、速度环200Hz、位置环20Hz)实现亚微米级位置跟踪。文中提供了完整的Simulink建模步骤,包括主电路搭建、三环PI控制器实现及坐标变换模块,并验证了系统性能:阶跃响应时间35ms,位置误差<0.05°,正弦跟踪误差<0.15°,负载突加恢复时间0.08s。最后提出了参数自适应整定、前馈

amy_mhd的博客 279

在ios开发中怎么获取应用崩溃日志

如何获得crash日志  当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上。crash日志记录着应用程序崩溃信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位问题很有帮助。   如果设备就在身边,可以连接设备,打开Xcode - Window - Organizer,在左侧面板选择Device Logs(可以选择具体设备Device Logs或者

white_xuqin的专栏 6240

华为OD机试:查找接口成功率最优时间段 (C/C++/Py/Java/JS/GO)

华为OD机试双机位C卷 查找接口成功率最优时间段,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。

qq_45776114的博客 4686

分析iOS Crash文件:符号化iOS Crash文件的3种方法

文章转载自:http://wufawei.com/2014/03/symbolicating-ios-crash-logs/ HOMEABOUTGUESTBOOKCATEGORIESTAGSLINKSSUBSCRIBE 当你的应用提交到AppStore或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文

chaoyuan899的专栏 6706

【Unity终极奥义】Unity打包去掉启动画面Logo,无需破解,一学就会

大家都知道Unity打包的应用在启动的时候都会有一个默认的UnityLogo。 而且这个Logo使用升级版和破解版都是可以随意清除和更换的。 但是Unity个人版是无法通过Unity的打包设置去进行更换的。 那今天就教大家一个使用个人普通版更换Unity启动画面Logo的方法!一起来看一下吧!

努力前行,总会成为自己心中的那道光 8万+

LLCC68芯片系统架构与LoRa驱动开发核心解析

LoRa射频收发器是低功耗广域物联网(LPWAN)的关键组件,其本质是集成了调制解调器、协议引擎、数据缓冲区与电源管理的专用SoC。理解其工作模式状态机(Sleep/Standby/TX/RX)与SPI主机接口时序规范,是实现稳定通信的基础。LLCC68通过寄存器映射与命令集双接口抽象硬件控制,支持LoRa扩频调制与FSK兼容模式,具备高链路预算(157 dB)和DC-DC/LDO动态电源切换能力。典型应用场景包括远距离传感器节点、智能表计与工业无线监测系统。本文深入剖析LLCC68的信号链路径、中断机制与

weixin_29859471的博客 281

iOS开发,线上问题/crash如何排查

线上问题的排查是一个多方面的工作,涉及到工具的使用、日志分析、用户行为追踪以及多种测试方法。分析崩溃报告和日志。使用性能分析工具(如 Instruments)来排查性能瓶颈。跟踪用户行为,发现潜在的用户操作问题。网络抓包和调试,确认请求和响应的正确性。重现线上问题,找到可能的根本原因。通过这些方法,我们可以有效地定位线上问题并尽快修复,提高用户体验。没有堆栈信息的崩溃问题排查,通常需要综合多种手段和工具,如崩溃日志分析、性能分析、内存管理工具、线程分析、重现步骤排查、代码审查等。

opentogether的博客 2003

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

iOS Crash收集与分析

一、收集crash 1、使用Xcode从设备获取崩溃日志: 如果你把你的手机连接到Mac,并选择Xcode->Windows->Device and Simulator,然后点击View Device Logs,你会看到手机上会有好多Log,其中Type为Crash的就是崩溃的Log,如下图: 2、通过设备直接获取崩溃日志 1)打开设置->隐私->分析->分析数据,...

weixin_37543822的博客 342

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ios崩溃日志收集_iOS崩溃日志收集与解析

收集crash日志方式1.设备上直接查看路径:设置 -> 隐私 -> 分析 -> 分析数据2.xcode获取设备上信息路径:xcode菜单栏Window -> Devices and Simulators -> 选中设备 -> View Device Logs3.xcode获取发布版本崩溃信息路径:xcode菜单栏Window -> Organizer -...

weixin_39754616的博客 812

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ios开发中怎么获取应用崩溃日志

如何获得crash日志   当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上。crash日志记录着应用程序崩溃信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位问题很有帮助。   如果设备就在身边,可以连接设备,打开Xcode - Window - Organizer,在左侧面板选择Device Logs(可以选择具体设备Device Logs...

weixin_33887443的博客 112

回顾 crash log 分析

一、 crash log 格式 图片来源:www.cnblogs.com/ciml/p/7422… 基本信息: Binary Images : 大概分三部分吧,1、基本信息2、线程3、Binary Images(二进制文件) 1、基本信息 重点看: 1、 CodeType: Arm-64 2、Exception Type:崩溃类型 3、Triggered by Thread: 1 崩溃的是哪个线...

weixin_33719619的博客 1879

iOS Crash日志符号化

1.为什么要符号化: IOS程序在真机运行程序出现crash状况时,机器会自动产生log文件,它包含了在程序crash之前的运行逻辑,分析carsh文件,有效的解决程序在真机上的问题,保证程序良好的稳定性,但是这个crash文件多数是显示出现问题的地址和一些系统的消息,无法查看程序中对应的崩溃地点。所以需要符号化转化为我们熟悉的代码方便定位问题。 xxx.crash的原日志: 0 l...

weixin_30249203的博客 140

iOS----- Crash 分析(文三)- 符号化崩溃日志

未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了。所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字。这一步我们称之为符号化。在iOS Crash分析(文一)中已经提到过符号化的两种方式: 1.利用Xcode符号化 2.利用symbolicatecrash脚本符号化 其实这两种分析方式都使用了同一个工具符号化:***atos***。atos是苹果提供的符号化工具...

weixin_30675967的博客 90

iOS开发~Crash优化

一、概要 iOS App开发中和上线后,都会遇到程序异常退出的情况,导致崩溃的原因有很多,如果是在调试的过程中,可以通过设施断点或者打印关键信息的方式来进行调试,如果对于一些复杂模块非必现的异常崩溃,这种方式有时难以定位问题,而且对于已经发布上线的应用,这种方式更是无能为力。下面详细讨论崩溃产生的原因以及如何处理。 二、Crash的捕获 1、Crash产生原因 1、应用中有Bug。 2、Watchdog 超时机制 3、用户强制退出 4、低内存终止 5、其他违反系统规则的操作,大部分是内存问题 .

阿福的专栏 1076

iOS .ips(crash)崩溃报告文件分析

首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的xxx.app和xxx.dSYM文件。 其次,验证xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。 验证方法: 1)查看xxx.app的uuid。 [plain] view plain copy $ dwa

wangxiong_zh的专栏 2766
上一篇: iOS开发 XCode9如何打印中文日志
下一篇: UITableView分割线不显示
devil_0311
博客等级 码龄10年 13粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值