通過規則引擎跟蹤Java執行狀態的檢測工具:Byteman
Byteman 是一個工具,可以輕鬆跟蹤、監視和測試 Java 應用程式和 JDK 執行時程式碼的行為。
Byteman的規則引擎使跟蹤程式執行、更改變數和返回您喜歡的語句變得非常容易。
- 它將 Java 程式碼注入到您的應用程式方法或 Java 執行時方法中,而無需您重新編譯、重新打包甚至重新部署您的應用程式。
- 注入可以在 JVM 啟動時或啟動後在應用程式仍在執行時執行。
- 注入的程式碼可以訪問您的任何資料並呼叫任何應用程式方法,包括它們是私有的。您幾乎可以在任何地方注入程式碼,無需提前準備原始原始碼。
- 甚至可以在應用程式繼續執行時刪除注入的程式碼並重新安裝不同的更改。
Byteman 最簡單的用途是注入列印語句來跟蹤您的應用程式正在做什麼,通過程式碼識別控制流並顯示靜態或例項資料的值。這可用於監視或除錯實時部署以及檢測被測程式碼,以確保它已正確執行。
Byteman BMUnit 包將 Byteman 與 JUnit 和 TestNG 整合在一起,使您可以輕鬆地使用 Byteman 來擴充套件單元和整合測試的範圍。BMUnit 很容易整合到 maven 和 ant 專案中。
工作原理
Byteman 通過在執行時修改應用程式類的位元組碼來工作。然而,與許多其他位元組碼轉換器不同,它在 Java 級別而不是位元組碼級別上執行。你給 Byteman 一個或多個規則來指定你想要執行的 Java 程式碼,以及你想要注入的應用程式或執行時類的方法中的位置。Byteman 研究如何重寫位元組碼,使其表現得就像原始 Java 程式碼包含您請求的原始碼級別更改一樣。由於 Byteman 只需要訪問位元組碼,這意味著它可以修改源不可用或無法重新編譯的庫程式碼。這甚至包括構成 Java 虛擬機器一部分的 Java 程式碼、String、Thread 等類。所以,
Byteman 使用一種清晰、簡單的指令碼語言,基於稱為事件條件操作 (ECA) 規則的形式來指定原始 Java 程式碼應在何處、何時以及如何進行轉換。一個事件指定了一個觸發點,一個您想要注入程式碼的位置。當執行到達觸發點時,將評估規則的條件,即 Java 布林表示式。僅當條件評估為真時,才會執行規則操作中的 Java 表示式(或表示式序列)。通常,一旦執行了注入的程式碼,就會從觸發點繼續執行。然而,規則動作可能包括返回或丟擲表示式,分別從觸發方法強制正常或異常返回。
Byteman 提供了一套內建的“便利”功能,您可以從規則條件和操作中呼叫這些功能。它們允許您執行範圍廣泛的有用操作,從簡單的訊息輸出或堆疊轉儲到複雜錯誤流的傳播,其中多個規則在應用程式的不同部分引入協調操作。
但是,您不僅限於這些標準的內建操作。只要它們引用的類和例項在注入點的範圍內,您就可以將任何 Java 表示式注入到您的應用程式中。您還可以通過提供 POJO(普通的舊 java 物件)作為外掛來替換或擴充套件可用的內建函式。
Byteman 將規則程式碼動態連結到目標方法上下文中,在可能的情況下自動推斷值和表示式的型別,並確保生成的程式碼是型別安全的,並且不會破壞由觸發器方法的簽名定義的型別協定。即使是最複雜的測試場景,Byteman 也能輕鬆程式設計。
Byteman 4.0.18現在可以在 GNU LGPL 下下載。它需要 JDK 7 或更高版本的 JVM(如果您仍在使用 JDK 6,請使用最新的 3.X 版本)。該版本包括程式設計師指南,也可線上獲得(pdf或html),它提供了 Byteman 的功能、操作方式和使用方式的完整描述,包括所有可用的執行時配置選項。
相關文章
- 使用 Prometheus 監控 eKuiper 規則執行狀態PrometheusUI
- Java執行緒的狀態Java執行緒
- 檢視BW執行狀態
- 通過Python檢視Azure VM的狀態Python
- 跟蹤執行命令T
- Java多執行緒-執行緒狀態Java執行緒
- 風控規則引擎(一):Java 動態指令碼Java指令碼
- 【Java】執行緒的 6 種狀態Java執行緒
- Java 執行緒的5種狀態Java執行緒
- java執行緒的狀態+鎖分析Java執行緒
- 如何實現Dolphinscheduler YARN Task狀態跟蹤?Yarn
- MYSQL sql執行過程的一些跟蹤分析(一)MySql
- Java各種規則引擎Java
- Java規則引擎 Easy RulesJava
- 使用 telescope 檢視 schedule 執行狀態
- Java執行緒狀態轉換Java執行緒
- 手勢檢測跟蹤解決方案
- java執行緒的五大狀態,阻塞狀態詳解Java執行緒
- ABAP的許可權檢查跟蹤(Authorization trace)工具
- 檢視mysql執行狀態的一些sqlMySql
- java檢測當前CPU負載狀態的方法Java負載
- Java執行緒狀態及切換Java執行緒
- Java執行緒狀態及同步鎖Java執行緒
- RAKsmart檢測網速和跟蹤路由功能的用途路由
- 通過Python收集MySQL MHA 部署及執行狀態資訊的功能實現PythonMySql
- drools執行完某個規則後終止別的規則執行
- MYSQL sql執行過程的一些跟蹤分析(二.mysql優化器追蹤分析)MySql優化
- Linux如何檢視系統和程式的執行狀態?Linux
- PostgreSQL 原始碼解讀(15)- Insert語句(執行過程跟蹤)SQL原始碼
- drools執行指定的規則
- drools執行String規則或執行某個規則檔案
- 用 Java 構建簡單的規則引擎Java
- 如何學習Java的規則引擎模式? - plagovJava模式Go
- 使用jstack檢測Java應用的死鎖(deadlock)狀態JSJava
- JAVA 執行緒狀態及轉化(轉)Java執行緒
- 一起分析執行緒的狀態及執行緒通訊機制執行緒
- 執行緒狀態執行緒
- 檢視spark程式執行狀態以及安裝sparkSpark