|
本帖最后由 howill2021 于 2025-7-24 23:48 编辑
今天遇到了一个数组异常,调试时候很正常,编译后安装其他设备偶尔异常,只能看到是数组报错,具体哪一行代码引用的数组就看不到,这一顿折腾也没找到,AI生成了一段可以获取堆栈,以便查找错误
- <火山程序 类型 = "通常" 版本 = 1 />
- 方法 取本地异常文本3 <公开 静态 类型 = 文本型 注释 = "将本异常的错误信息获取到"错误信息"参数中去." 注释 = "如果没有本地语言翻译信息,所返回错误信息与"取异常文本2"相同."
- 折叠 折叠2 @禁止流程检查 = 真>
- 参数 欲操作本对象 <类型 = 可俘获异常类>
- {
- @ Throwable e = @<欲操作本对象>;
- @ StringBuilder buffer = new StringBuilder();
- @ buffer.setLength(0);
- // 获取主异常信息,处理可能为null的情况
- @ String mainMessage = e.getLocalizedMessage();
- @ if (mainMessage == null) {
- @ mainMessage = e.getMessage();
- @ }
- @ if (mainMessage == null) {
- @ mainMessage = "无详细错误信息";
- @ }
- @ buffer.append(mainMessage).append(" [").append(e.getClass().getName()).append("]\n");
- // 添加堆栈跟踪信息
- @ StackTraceElement[] stackTrace = e.getStackTrace();
- @ if (stackTrace != null && stackTrace.length > 0) {
- @ for (StackTraceElement element : stackTrace) {
- @ buffer.append(" at ").append(element.toString()).append("\n");
- @ }
- @ } else {
- @ buffer.append(" (无堆栈跟踪信息)\n");
- @ }
- // 处理异常原因链
- @ Throwable cause = e.getCause();
- @ int causeCount = 0;
- @ while (cause != null) {
- @ causeCount++;
- @ // 获取原因异常信息
- @ String causeMessage = cause.getLocalizedMessage();
- @ if (causeMessage == null) {
- @ causeMessage = cause.getMessage();
- @ }
- @ if (causeMessage == null) {
- @ causeMessage = "无详细错误信息";
- @ }
- @ buffer.append("Caused by: ").append(causeMessage)
- @ .append(" [").append(cause.getClass().getName()).append("]\n");
- @ // 添加原因异常的堆栈跟踪
- @ StackTraceElement[] causeStackTrace = cause.getStackTrace();
- @ if (causeStackTrace != null && causeStackTrace.length > 0) {
- @ for (StackTraceElement element : causeStackTrace) {
- @ buffer.append(" at ").append(element.toString()).append("\n");
- @ }
- @ } else {
- @ buffer.append(" (无堆栈跟踪信息)\n");
- @ }
- @ cause = cause.getCause();
- @ }
- @ return buffer.toString();
- }
复制代码
|
|