1. 程式人生 > >如何使用加多寶(jdb)在linux下除錯Java程式

如何使用加多寶(jdb)在linux下除錯Java程式

畢業時寫了一段時間的C,那時候除錯使用gdb,後來轉了java,當時就想java程式怎麼除錯,找了一下,果然,那就是jdk自帶的jdb

windows裡是這樣的

Linux下是這樣的

一般我在linux下來除錯Java程式

 好,那麼,問題來了,這玩意怎麼用?有好幾種玩法

第一種玩法:以經典的HelloWorld為例,先寫一個Java程式,如下:

我們把編譯好的類上傳到linux下,如下所示

務必強調一下:類所在的包名的層次結構也要在linux下體現出來

下面我們來玩起來,在linux下操作如下

程式順利debug,每次都輸出當前的位置,就是line=5 這樣的,也可以使用where來檢視當前的執行緒棧,如下所示

 

好,到這裡,入門完成,讀者可能一臉懵逼,debug過程中沒法看到原始碼啊,這是因為我們只有class,沒有java檔案

下面我們把java檔案上傳上來,可以上傳到任何一個目錄,只要後面正確指定就行了,建立一個資料夾

然後按照層次結構把原始碼上傳上來

讓我們重新組織下jdb的命令如下

開心嗎?簡單的debug就可以進行了

 

有的同學說我有很多jar,不是類,這也是可以的,自己多嘗試一下,沒有問題,碰到問題百度下

 

上面是通過jdb來啟動一個程式,也有一種情況是程式在linux上跑得好好的,我想去除錯的時候去除錯,不想除錯的時候讓它自己執行不去打擾它

以我最近除錯的flink為例,ps -ef一把看一下

程式啟動的命令列里加上這些引數,然後怎麼使用呢?在你想要去debug它的時候,使用下面的命令

這個時候,jdb已經跟目標程序建立了關係,因為斷點還沒有觸發,所以我們什麼都看不到,我們嘗試來發送一條訊息到kafka來觸發這個斷點的hit

順利命中,這裡沒有原始碼出現,是因為我沒有放原始碼,我是在本地eclipse裡開啟java程式碼對比著看,讀者也可以上傳到linux下來玩,方法上面已經說過了

執行一把where看詳細的當前位置

時刻提醒你是誰,你在哪,你在幹什麼,別迷失了方向,迷茫的時候就執行一把where就會找到新的方向

這種方式不用指定class在哪,因為我們是連線到程序來實現debug,程序都起來了,也不用擔心class的識別了

好,簡單的debug其實已經可以了,下面講一下jdb的命令有哪些

傳送門:https://blog.csdn.net/xiaodejun5241/article/details/8162923

讀者可以在實踐中來掌握這些命令的使用

 

當你把所有原始碼都debug完一遍的時候,相信我,你的巔峰之路就開始了!

原文連結:https://my.oschina.net/qiangzigege/blog/2994977