递归火山软件开发平台

标题: 异常堆栈输出 [打印本页]

作者: howill2021    时间: 3 天前
标题: 异常堆栈输出
本帖最后由 howill2021 于 2025-7-24 23:48 编辑

(, 下载次数: 3)
今天遇到了一个数组异常,调试时候很正常,编译后安装其他设备偶尔异常,只能看到是数组报错,具体哪一行代码引用的数组就看不到,这一顿折腾也没找到,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. }
复制代码



作者: 2oon    时间: 前天 04:34
大佬牛逼
作者: 创世魂    时间: 前天 07:51
直接用  应用崩溃处理类 就行了。
作者: howill2021    时间: 前天 12:16
创世魂 发表于 2025-7-25 07:51
直接用  应用崩溃处理类 就行了。

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




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4