这个算是编码的坏习惯吧?
公司做HW外包,每行代码都要经过checkstyle,重复,圈复杂度的各种考验,而检测工具包含篡改过的第三方,或HW的DIY。公司的同事在各种规则下,也找到了各种应对方法。
昨天发现项目一个Bug,Debug后发现如下代码段(非原码,仅示例)
1 public static Object errExample(byte[] bytes){ 2 Object obj = null; 3 ObjectInputStream ois; 4 try { 5 ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 6 ois = new ObjectInputStream(bis); 7 obj = ois.readObject(); 8 } catch (IOException e) { 9 // Wrong, because may be subclass of IOExcption 10 Logger.getRootLogger().error("IOException is : " + "diy message."); 11 } catch (ClassNotFoundException e) { 12 Logger.getRootLogger().error("ClassNotFoundException is " + "diy message."); 13 } 14 return obj; 15 }
在第10行,捕捉了非运行时异常IOException,直接手工写了IOException,但实际项目中抛出的却是子类EOFException。原因呢,是在Socket实现RMI时byte数组长度写死,而实际的对象转码后超过门限,多余的被截去了。
所以在记录日志时,只使用代码应该就差不多了。
Logger.getRootLogger().error(e);
因为类Throwable已经写的够用了。
1 public String toString() { 2 String s = getClass().getName(); 3 String message = getLocalizedMessage(); 4 return (message != null) ? (s + ": " + message) : s; 5 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律