精华内容
下载资源
问答
  • ADB——获取APP崩溃日志
    千次阅读
    2021-10-26 09:29:28

    前言


    在测试Android APP的过程中遇到crash时,我们都需要把崩溃日志导出来作为附件传到bug管理工具中,今天分享一下我用的方式。

    目前抓取日志的主流方法是通过eclipse或者eclipse的ddms组件进行捕抓,这两种方法的缺点是启动时非常耗时。本文介绍的方法,只需要3~5秒即可获取崩溃日志,比较快捷。

    准备工作

    1. 在网上下载adb工具包,并保存在任意目录。

    2. 在环境变量path下添加adb的路径。

    3. 在任意目录下新建一个txt文件,然后把下面的内容复制进去。 然后把该文件的名称改为logcat.bat。(bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地

    @ECHO OFF
    
    for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
    
    SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
    
    SET mutID=_mut
    
    @ECHO ON
    
    adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log"
    
    pause

    1. 在网上下载adb工具包,并保存在任意目录。

    2. 在环境变量path下添加adb的路径。

    3. 在任意目录下新建一个txt文件,然后把下面的内容复制进去。 然后把该文件的名称改为logcat.bat。(bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地)

    使用步骤

     

    1. 将android手机连接电脑,开启开发者模式,并允许usb调试;

    2. 运行logcat.bat文件,会出现cmd窗口;

      1. 如果手机程序已经发生过crash,5秒后关闭cmd窗口;

      2. 如果是想重现crash,则在手机端重现后即可关闭cmd窗口。

    3. 在logcat.bat的同级目录下会生成一份log文件,从文件中搜查FATAL关键字,便可找到崩溃代码。

    更多相关内容
  • 一个Android可获取运行crash日志的工具类,使用简单方便,直接调用捕获全局crash日志信息,并写入文件到本地,方便查阅
  • adb抓取App crash日志

    2021-04-23 12:23:37
    adb查看Android小米6 ap crash日志 1.Android机打开开发者模式; 2.设置adb端口号 adb tcpip 5555; 3.获取小米6的IP地址; 4.adb通过命令【adb connect 安卓IP:5555】连接Android设备; 5.捕捉crash日志: 5.1...

    adb查看Android小米6 ap crash日志

    1.Android机打开开发者模式;
    在这里插入图片描述

    2.设置adb端口号 adb tcpip 5555;
    在这里插入图片描述
    3.获取小米6的IP地址;
    4.adb通过命令【adb connect 安卓IP:5555】连接Android设备;
    在这里插入图片描述
    5.捕捉crash日志:
    5.1命令行输入 adb logcat >自定义文件名.txt
    5.2回车执行
    5.3打开app复现crash场景
    5.4去文件夹查看crash log文件

    展开全文
  • iOS 获取crash日志

    2017-04-21 10:35:45
    所以作为开发人员,要及时的收集这些crash日志信息。这里我用了一种方法,就是当应用在用户使用时发生崩溃现象,会获取到崩溃的日志,然后调起邮箱让用户通过邮件发送给我们。具体代码如下:#pragma mark - 获取异常...

    在项目上架到App Store以后,谁也不能保证没有一个错误,可能在测试期间连测试人员都没有发现的隐藏小bug在上线之后被用户发现了,这就无疑给用户造成了困扰。所以作为开发人员,要及时的收集这些crash日志信息,然后修复这些问题。

    这里我用了一种方法,就是当应用在用户使用时发生崩溃现象,会获取到崩溃的日志,然后调起邮箱让用户通过邮件发送给我们。

    具体代码如下:

    #pragma mark - 获取异常日志
    
    - (void)installUncaughtExceptionHandler {
    
        NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
    }
    void UncaughtExceptionHandler(NSException *exception) {
    
        NSArray *arr = [exception callStackSymbols];
        NSString *reason = [exception reason];
        NSString *name = [exception name];
        NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
        NSString *urlStr = [NSString stringWithFormat:@"mailto://developer@qq.com?subject=Crash报告&body=您的建议会让我们做的更好,感谢您的配合!<br><br><br>""错误详情(%@):<br>%@<br>-----------------------<br>%@<br>---------------------<br>%@",currentVersion,name,reason,[arr componentsJoinedByString:@"<br>"]];
        NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        [[UIApplication sharedApplication]openURL:url];
    }
    

    然后在AppDelegate里的

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    
    //获取异常报告
        [self installUncaughtExceptionHandler];
    
    }

    方法中调用就可以了。

    展开全文
  • iOS Swift Crash日志收集

    2021-01-12 00:28:02
    尝试使用Swift进行日志收集-----------失败,最后还是调用OC实现AppDelegate中func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any...

    尝试使用Swift进行日志收集-----------失败,最后还是调用OC实现

    AppDelegate中

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Override point for customization after application launch.

    CatchCrash.share().installUncaughtExceptionHandler()

    return true

    }

    CatchCrash.swift

    import UIKit

    private let catchCrash = CatchCrash()

    private var UncaughtExceptionCount: Int32 = 0

    private var UncaughtExceptionMaximum: Int32 = 10

    class CatchCrash: NSObject {

    private let UncaughtExceptionMaximum: Int32 = 10

    private let SignalHandler: Darwin.sig_t? = { (signal) in

    let exceptionInfo = HandleCrash.crash(signal)

    try! exceptionInfo?.write(toFile: NSHomeDirectory() + "/Documents/error1.log", atomically: true, encoding: .utf8)

    }

    class func share() -> CatchCrash {

    return catchCrash

    }

    func installUncaughtExceptionHandler() {

    NSSetUncaughtExceptionHandler { (exception) in

    // 异常的堆栈信息

    let stackArray = exception.callStackSymbols

    // 出现异常的原因

    let reason = exception.reason

    // 异常名称

    let name = exception.name

    let exceptionInfo = "Eqqqqqxception reason:\(String(describing: reason))\n"

    + "Exception name:\(name)\n"

    + "Exception stack:\(stackArray.description)"

    print(exceptionInfo)

    var tmpArr = stackArray

    tmpArr.insert(reason!, at: 0)

    //保存到本地

    try! exceptionInfo.write(toFile: NSHomeDirectory() + "/Documents/error1.log", atomically: true, encoding: .utf8)

    abort()

    }

    signal(SIGABRT, SignalHandler)

    signal(SIGILL, SignalHandler)

    signal(SIGSEGV, SignalHandler)

    signal(SIGFPE, SignalHandler)

    signal(SIGBUS, SignalHandler)

    signal(SIGPIPE, SignalHandler)

    }

    }

    CatchCrash-Bridging-Header.h 中进行桥接

    #import "HandleCrash.h"

    HandleCrash.h

    #import

    @interface HandleCrash : NSObject

    + (NSString *)crash:(int)signal;

    @end

    HandleCrash.m

    #import "HandleCrash.h"

    #import

    #include

    NSString * const UncaughtExceptionHandlerSignalExceptionName = @"UncaughtExceptionHandlerSignalExceptionName";

    NSString * const UncaughtExceptionHandlerSignalKey = @"UncaughtExceptionHandlerSignalKey";

    NSString * const UncaughtExceptionHandlerAddressesKey = @"UncaughtExceptionHandlerAddressesKey";

    atomic_int UncaughtExceptionCount = 0;

    const int32_t UncaughtExceptionMaximum = 10;

    const NSInteger UncaughtExceptionHandlerSkipAddressCount = 4;

    const NSInteger UncaughtExceptionHandlerReportAddressCount = 5;

    @implementation HandleCrash

    + (NSString *)crash:(int)signal {

    int exceptionCount = atomic_fetch_add_explicit(&UncaughtExceptionCount, 1, memory_order_relaxed);

    if (exceptionCount > UncaughtExceptionMaximum) {

    return @"";

    }

    NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:signal]

    forKey:UncaughtExceptionHandlerSignalKey];

    NSArray *callStack = [self backtrace];

    [userInfo setObject:callStack

    forKey:UncaughtExceptionHandlerAddressesKey];

    NSException *exception = [NSException

    exceptionWithName: UncaughtExceptionHandlerSignalExceptionName reason: [NSString stringWithFormat:

    NSLocalizedString(@"Signal %d was raised.", nil),

    signal] userInfo: userInfo];

    return [NSString stringWithFormat:@"%@, %@, %@", exception.name, exception.reason, exception.userInfo];

    }

    + (NSArray *)backtrace

    {

    void* callstack[128];

    int frames = backtrace(callstack, 128);

    char **strs = backtrace_symbols(callstack, frames);

    int i;

    NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];

    for (

    i = UncaughtExceptionHandlerSkipAddressCount;

    i < UncaughtExceptionHandlerSkipAddressCount +

    UncaughtExceptionHandlerReportAddressCount;

    i++)

    {

    [backtrace addObject:[NSString stringWithUTF8String:strs[i]]];

    }

    free(strs);

    return backtrace;

    }

    @end

    展开全文
  • 当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上。这份crash日志记录着应用程序崩溃时的信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位问题很有帮助。 为保障线...
  • JVM crash 错误日志分析

    2019-04-02 01:09:31
    NULL 博文链接:https://myspace1916.iteye.com/blog/1441465
  • 在ios开发过程,当应用已经打包,iPhone设备通过ipa的包安装应用后,在使用过程发现crash,那么如何获取crash日志呢,现提供如下四种获取crash日志的方式:1、打开iPhone设备的设置里面的隐私中的“诊断与用量”,...
  • 如何用程序获取Crash日志 并 可以上传Crash日志,查看解析和定位。
  • Java的应用有时候会因为各种原因Crash,这时候会产生一个类似java_errorpid.log的错误日志。可以拿到了这个日志,怎样分析Crash的原因呢?下面我们来详细讨论如何分析java_errorpid.log的错误日志。一. 如何得到这个...
  • Crash日志分析

    2014-03-20 17:03:39
    应用崩溃日志分析,只要选择相应文件的路径,开始分析即可
  • 1. 方法一:查看手机端日志(只可看到已发生crash日志,不受电脑的限制) 直接查看手机系统设置->隐私->分析与改进,即可查看发生过crash的日志,通常,崩溃日志格式包含程序包名,时间以及后缀ips或者beta....
  • iOS:crash日志收集

    2020-07-07 11:26:34
    NSException是OC中关于异常的类,它包含了reason异常原因,callStackSymbols堆栈调用信息,因此可以在程序crash时,利用系统回调NSSetUncaughtExceptionHandler可以获取crash日志。 - (BOOL)application:...
  • iOS崩溃日志(崩溃报告)符号化的工具(对于OS Windows)
  • Android导出Crash日志

    2021-05-04 20:18:13
    一行代码: adbbugreport 搞定 参考:https://developer.android.com/studio/debug/bug-report
  • iOS Crash日志-分析

    2022-03-25 23:44:10
    iOS Crash日志-分析
  • iOS Crash日志收集上报

    2022-03-25 23:41:14
    iOS Crash日志收集上报
  • 安卓应用crash日志获取

    千次阅读 2017-04-10 16:03:56
    安卓系统的应用免不了crash,或者是应用本身的问题,或者安卓设备的...第一种:市面上现有的加固服务方大多提供这个服务,只要把应用上传,平台会自动收集crash日志用于分析,不过前提是要有这些平台的账号(比如友盟)
  • 崩溃日志的捕获有很多种方式,最直接的就是接入三方的捕获,但是由于某些原因或者说某些原因导致不能准确的定位到崩溃的位置,也为了使应用程序测试时更好的定位崩溃位置(测试机多的时候不可能每个都去打LOG和断点) ...
  • Android crash 日志

    2017-10-18 15:15:56
    Android crash 文件。用于分析 force close ,快速定位 bug。
  • 崩溃套件 因为动图是用模拟器制作的,如果是真机的话,也是支持便签打开,微信一键分享给小伙伴的 引入方式 ...看crash日志列表 startActivity(Intent( this , CrashLogActivity :: class . java))
  • 本篇文章主要介绍了jvm crash的崩溃日志详细分析及注意点。具有很好的参考价值,下面跟着小编一起来看下吧
  • 目录标题例子抓取crash 日志日志分析 例子 void crash_test_func() { int* ptr = nullptr; // 行号173 *ptr = 99; // 行号174 } // net 在 jni中调用 void Net::initEngine(const char* data) { crash_test_func...
  • 分析Crash 日志

    千次阅读 2019-06-16 15:38:17
    分析Crash 日志 1、Header Incident Identifier: B6FD1E8E-B39F-430B-ADDE-FC3A45ED368C CrashReporter Key: f04e68ec62d3c66057628c9ba9839e30d55937dc Hardware Model: iPad6,8 Process: TheElements [303] Path: ...
  • 一次调试 StringEncoding.decode 的crash日志
  • ios Crash闪退日志获取和上传至服务器
  • 启动服务器以保存崩溃日志。 $ node server.js 接收到的信息会发送到crashlist.nedb,转储文件会保存在自动生成的uploads文件夹中。 crashlist.nedb 是一个 JSON 格式的文本文件。您也可以使用文本编辑器打开它。 ...
  • Android Crash日志收集

    千次阅读 2017-09-21 21:27:10
    但是很明显,靠这种方式收集Crash日志修改bug,实在是太不靠谱,一旦APP发布测试甚至生产环境,如果没有一个Crash日志的反馈,那么将会是一个噩梦,所以本文的目的: 实现自定义的UncaughtExceptionHandler
  • APP闪退分析及Crash日志获取

    万次阅读 2017-10-12 09:27:43
    app 闪退一般抓取mtklog看不出具体原因,即使有aee_exp文件夹产生,使用Logcatview工具也解析不出 ...crash日志 1、直接连上eclipse中的ddms进行crashlog的获取。 2、或者通过命令获取:adb logcat –v

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,825
精华内容 19,930
关键字:

如何获取crash日志