成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Bug分析之異常變量堆棧信息

開發 后端
異常是一種特殊的類,在創建異常時會保存創建時的方法調用堆棧鏡像。即,為了保留異常出現時的實時堆棧信息,不應復用異常,每個異常均需單獨new方式生成。

異常是一種特殊的類,在創建異常時會保存創建時的方法調用堆棧鏡像。即,為了保留異常出現時的實時堆棧信息,不應復用異常,每個異常均需單獨new方式生成。

下面演示一段有問題的代碼并進行分析

1.問題代碼

a)自定義異常定義

  1. package demo.bce;  
  2. public class MyException extends RuntimeException {  
  3.     private static final long serialVersionUID = -3802919537257556719L;  
  4.     private String id;  
  5.     public MyException(String id) {  
  6.        super();  
  7.        this.id = id;  
  8.     }  
  9.     public String getId() {  
  10.        return id;  
  11.     }  
  12.     public void setId(String id) {  
  13.        this.id = id;  
  14.     }  
  15.     @SuppressWarnings("unused")  
  16.     private MyException() {  
  17.     }  

b)自定義異常常量

  1. package demo.bce;  
  2.    
  3. public final class MyExceptionContext {  
  4.    
  5.     // x1,x2,y1,y2的Throw相關堆棧信息在創建時一次性生成(不再變化)  
  6.     // 即使用此異常會得到錯誤的堆棧描述信息  
  7.     public static final MyException x1 = new MyException("X1");  
  8.     public static final MyException x2 = new MyException("X2");  
  9.    

c)測試代碼

package demo.bce;

  1. public class MyMain {  
  2.     public static void main(String[] args) {  
  3.        testx();  
  4.     }  
  5.     // ///  
  6.     private static void testx() {  
  7.        try {  
  8.            x11();  
  9.        } catch (Exception e) {  
  10.            e.printStackTrace();  
  11.        }  
  12.        try {  
  13.            x12();  
  14.        } catch (Exception e) {  
  15.            e.printStackTrace();  
  16.        }  
  17.        try {  
  18.            x21();  
  19.        } catch (Exception e) {  
  20.            e.printStackTrace();  
  21.        }  
  22.        try {  
  23.            x22();  
  24.        } catch (Exception e) {  
  25.            e.printStackTrace();  
  26.        }  
  27.     }  
  28.     private static void x11() {  
  29.        throw MyExceptionContext.x1;  
  30.     }  
  31.     private static void x12() {  
  32.        throw MyExceptionContext.x2;  
  33.     }  
  34.     private static void x21() {  
  35.        throw MyExceptionContext.x1;  
  36.     }  
  37.     private static void x22() {  
  38.        throw MyExceptionContext.x2;  
  39.     }  

d)測試結果

  1. demo.bce.MyException  
  2. at demo.bce.MyExceptionContext.<clinit>(MyExceptionContext.java:7)  
  3. at demo.bce.MyMain.x11(MyMain.java:36)  
  4. at demo.bce.MyMain.testx(MyMain.java:14)  
  5. at demo.bce.MyMain.main(MyMain.java:7)  
  6. demo.bce.MyException  
  7. at demo.bce.MyExceptionContext.<clinit>(MyExceptionContext.java:8)  
  8. at demo.bce.MyMain.x11(MyMain.java:36)  
  9. at demo.bce.MyMain.testx(MyMain.java:14)  
  10. at demo.bce.MyMain.main(MyMain.java:7)  
  11. demo.bce.MyException  
  12. at demo.bce.MyExceptionContext.<clinit>(MyExceptionContext.java:7)  
  13. at demo.bce.MyMain.x11(MyMain.java:36)  
  14. at demo.bce.MyMain.testx(MyMain.java:14)  
  15. at demo.bce.MyMain.main(MyMain.java:7)  
  16. demo.bce.MyException  
  17. at demo.bce.MyExceptionContext.<clinit>(MyExceptionContext.java:8)  
  18. at demo.bce.MyMain.x11(MyMain.java:36)  
  19. at demo.bce.MyMain.testx(MyMain.java:14)  
  20. at demo.bce.MyMain.main(MyMain.java:7) 

代碼實際上在四個不同的方法中拋出了兩個不同的異常,但拋到四個異常的堆棧信息居然完全一致。

另外,x11和x21雖然拋同一個異常,但x11的異常無stackTrace,x21的異常有stackTrace信息。

2.代碼分析和猜想

在MyExceptionContext***被調用時才生成常量異常x1和x2。注意x1和x2是同時生成的,且基本上處于相同的方法調用環境。故x1和x2的方法調用堆棧信息基本一致,進而在實際使用時嚴重誤導異常的拋出分析。

另外,通常情況下,異常是需要設置cause的。因此,也不應該嘗試常量異常(cause每次可能不一樣)。

3.簡單總結

使用異常時實時new一個出來返回以獲取正確方法調用堆棧信息。

原文鏈接:http://jekiy.iteye.com/blog/1318670

【編輯推薦】

  1. 解讀Java環境變量配置
  2. Java精確截取字符串
  3. Java I/O系統基礎知識
  4. Java 遠程文件對接
  5. Java字符編碼根本原理
責任編輯:林師授 來源: jekiy的博客
相關推薦

2020-07-08 07:50:50

OOM虛擬機Java

2023-11-15 17:23:30

測試軟件開發

2011-04-01 10:55:29

OSPFDebug

2021-06-07 09:37:05

異常Bug排查

2021-01-28 09:34:08

解密密鑰取證分析

2014-11-10 09:42:59

JVM線程堆棧

2023-03-28 07:08:09

RocketMQ消費者堆棧

2023-09-17 23:23:14

Java異常堆棧

2021-07-04 22:29:12

MySQL死鎖云日志

2021-02-25 08:40:19

Java異常分類異常防護

2021-03-18 10:01:06

Java編譯異常運行異常

2022-07-27 11:45:43

iOS蘋果系統

2011-06-14 16:05:31

BUG流程

2020-10-05 21:33:15

隱私數據匿名數據安全

2023-03-01 09:07:44

前端監控異常

2021-04-13 12:55:06

SpringMVC解析器接口

2021-06-05 23:41:47

NET異常 HttpClient

2018-04-19 08:40:37

OracleJOB異常中斷

2021-02-20 16:03:10

程序員bug測試

2009-11-09 09:55:24

WCF學習筆記
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本午夜精品 | 亚洲欧美中文日韩在线v日本 | a免费在线 | 欧美在线视频不卡 | 黄片毛片在线观看 | 日韩av在线一区 | 久久久久久av| 在线日韩视频 | 午夜一区二区三区在线观看 | a视频在线 | 午夜理伦三级理论三级在线观看 | av一区二区三区四区 | 羞羞视频在线网站观看 | 久久久久久高清 | 色屁屁在线观看 | 日韩欧美在线观看 | 欧美群妇大交群中文字幕 | 色av一区二区| 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 日韩成人在线免费视频 | 国产97久久| 一区二区三区不卡视频 | 亚洲午夜久久久 | 亚洲欧美一区二区三区国产精品 | 日本一区二区三区在线观看 | 日韩在线中文字幕 | 日本久久精 | 国产欧美日韩综合精品一区二区 | 二区久久 | 国产一级片在线观看视频 | 免费在线观看一区二区三区 | 亚洲欧美综合 | 日本二区在线观看 | 第一av| 国产色在线 | 日韩欧美在线观看视频 | 久热久热| 亚洲一区在线免费观看 | 国产精品亚洲欧美日韩一区在线 | 中文一区 | 国产欧美日韩一区二区三区在线 |