如何使用加多寶(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM