递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 291|回复: 3
打印 上一主题 下一主题

[安卓] 异常堆栈输出

[复制链接]

35

主题

225

帖子

2283

积分

金牌会员

Rank: 6Rank: 6

积分
2283
跳转到指定楼层
楼主
本帖最后由 howill2021 于 2025-7-24 23:48 编辑


今天遇到了一个数组异常,调试时候很正常,编译后安装其他设备偶尔异常,只能看到是数组报错,具体哪一行代码引用的数组就看不到,这一顿折腾也没找到,AI生成了一段可以获取堆栈,以便查找错误

  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 取本地异常文本3 <公开 静态 类型 = 文本型 注释 = "将本异常的错误信息获取到"错误信息"参数中去." 注释 = "如果没有本地语言翻译信息,所返回错误信息与"取异常文本2"相同."
  3.         折叠 折叠2 @禁止流程检查 = 真>
  4. 参数 欲操作本对象 <类型 = 可俘获异常类>
  5. {

  6.     @ Throwable e = @<欲操作本对象>;
  7.     @ StringBuilder buffer = new StringBuilder();
  8.     @ buffer.setLength(0);

  9.     // 获取主异常信息,处理可能为null的情况
  10.     @ String mainMessage = e.getLocalizedMessage();
  11.     @ if (mainMessage == null) {
  12.     @     mainMessage = e.getMessage();
  13.     @ }
  14.     @ if (mainMessage == null) {
  15.     @     mainMessage = "无详细错误信息";
  16.     @ }
  17.     @ buffer.append(mainMessage).append(" [").append(e.getClass().getName()).append("]\n");


  18.     // 添加堆栈跟踪信息
  19.     @ StackTraceElement[] stackTrace = e.getStackTrace();
  20.     @ if (stackTrace != null && stackTrace.length > 0) {
  21.     @     for (StackTraceElement element : stackTrace) {
  22.     @         buffer.append("  at ").append(element.toString()).append("\n");
  23.     @     }
  24.     @ } else {
  25.     @     buffer.append("  (无堆栈跟踪信息)\n");
  26.     @ }

  27.     // 处理异常原因链
  28.     @ Throwable cause = e.getCause();
  29.     @ int causeCount = 0;
  30.     @ while (cause != null) {
  31.     @     causeCount++;
  32.     @     // 获取原因异常信息
  33.     @     String causeMessage = cause.getLocalizedMessage();
  34.     @     if (causeMessage == null) {
  35.     @         causeMessage = cause.getMessage();
  36.     @     }
  37.     @     if (causeMessage == null) {
  38.     @         causeMessage = "无详细错误信息";
  39.     @     }
  40.     @     buffer.append("Caused by: ").append(causeMessage)
  41.     @         .append(" [").append(cause.getClass().getName()).append("]\n");

  42.     @     // 添加原因异常的堆栈跟踪
  43.     @     StackTraceElement[] causeStackTrace = cause.getStackTrace();
  44.     @     if (causeStackTrace != null && causeStackTrace.length > 0) {
  45.     @         for (StackTraceElement element : causeStackTrace) {
  46.     @             buffer.append("  at ").append(element.toString()).append("\n");
  47.     @         }
  48.     @     } else {
  49.     @         buffer.append("  (无堆栈跟踪信息)\n");
  50.     @     }
  51.     @     cause = cause.getCause();
  52.     @ }

  53.     @ return buffer.toString();

  54. }
复制代码


回复

使用道具 举报

35

主题

225

帖子

2283

积分

金牌会员

Rank: 6Rank: 6

积分
2283
地板
 楼主| 发表于 前天 12:16 | 只看该作者
创世魂 发表于 2025-7-25 07:51
直接用  应用崩溃处理类 就行了。

这个类是必须弹出窗口后才能获取吧,
非致命错误没必要弹窗让用户看到
回复

使用道具 举报

459

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
44734
板凳
发表于 前天 07:51 | 只看该作者
直接用  应用崩溃处理类 就行了。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

15

主题

316

帖子

2336

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2336
沙发
发表于 前天 04:34 | 只看该作者
大佬牛逼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-7-27 21:51 , Processed in 0.090164 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表