Maven Tomcat embedded JDB調試

 

一、設置MAVEN_OPTS

 

因爲mvn tomcat6:run是使用embedded tomcat的方式,所以,debug必須經過配置Maven實現,在環境變量中配置:java

MAVEN_OPTS

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

 

其中,address=8000表示經過JDB鏈接的端口爲8000。配置完成後,運行mvn tomcat6:run 會啓動8000端口,用於JDWP調試。shell

 

二、使用JDB進行調試

 

在命令行中運行:編程

jdb –connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000

能夠經過jdb的命令添加斷點,並進行調試,經常使用的命令以下:數組

 

** 命令列表 ** 
connectors                -- 列出此 VM 中可用的鏈接器和傳輸器

run [類 [參數]]        -- 開始執行應用程序的主類

threads [線程組]     -- 列出線程 
thread <線程 ID>        -- 設置默認線程 
suspend [線程 ID]    -- 暫停線程(默認值爲 all) 
resume [線程 ID]     -- 恢復線程(默認值爲 all) 
where [<線程 ID> | all] -- 轉儲線程的堆棧 
wherei [<線程 ID> | all] -- 轉儲線程的堆棧以及 pc 信息 
up [n 幀]             -- 向上移動線程的堆棧 
down [n 幀]           -- 向下移動線程的堆棧 
kill <線程 ID> <表達式>   -- 停止具備給定的異常對象的線程 
interrupt <線程 ID>     -- 中斷線程

print <表達式>              -- 輸出表達式的值 
dump <表達式>               -- 輸出全部對象信息 
eval <表達式>               -- 計算表達式的值(與 print 做用相同) 
set <lvalue> = <表達式>     -- 爲字段/變量/數組元素指定新值 
locals                    -- 輸出當前堆棧幀中的全部本地變量

classes                   -- 列出當前已知的類 
class <類 ID>          -- 顯示已命名類的詳細信息 
methods <類 ID>        -- 列出類的方法 
fields <類 ID>         -- 列出類的字段

threadgroups              -- 列出線程組 
threadgroup <名稱>        -- 設置當前線程組

stop in <類 ID>.<方法>[(參數類型,...)] 
                          -- 在方法中設置斷點 
stop at <類 ID>:<行> -- 在行中設置斷點 
clear <類 ID>.<方法>[(參數類型,...)] 
                          -- 清除方法中的斷點 
clear <類 ID>:<行>   -- 清除行中的斷點 
clear                     -- 列出斷點 
catch [uncaught|caught|all] <類 ID>|<類模式> 
                          -- 出現指定的異常時中斷 
ignore [uncaught|caught|all] <類 ID>|<類模式> 
                          -- 對於指定的異常,取消 'catch' 
watch [access|all] <類 ID>.<字段名> 
                          -- 監視對字段的訪問/修改 
unwatch [access|all] <類 ID>.<字段名> 
                          -- 中止監視對字段的訪問/修改 
trace [go] methods [thread] 
                          -- 跟蹤方法的進入和退出。 
                          -- 除非指定 'go',不然全部線程都將暫停 
trace [go] method exit | exits [thread] 
                          -- 跟蹤當前方法的退出或全部方法的退出 
                          -- 除非指定 'go',不然全部線程都將暫停 
untrace [方法]         -- 中止跟蹤方法的進入和/或退出 
step                      -- 執行當前行 
step up                   -- 執行到當前方法返回其調用方 
stepi                     -- 執行當前指令 
next                      -- 跳過一行(跨過調用) 
cont                      -- 從斷點處繼續執行

list [line number|method] -- 輸出源代碼 
use(或 sourcepath)[源文件路徑] 
                          -- 顯示或更改源路徑 
exclude [<類模式>, ...|「無」] 
                          -- 不報告指定類的步驟或方法事件 
classpath                 -- 從目標 VM 輸出類路徑信息

monitor <命令>         -- 每次程序中止時執行命令 
monitor                   -- 列出監視器 
unmonitor <監視器號>      -- 刪除某個監視器 
read <文件名>           -- 讀取並執行某個命令文件

lock <表達式>               -- 輸出對象的鎖信息 
threadlocks [線程 ID]   -- 輸出線程的鎖信息

pop                       -- 彈出整個堆棧,且包含當前幀 
reenter                   -- 與 pop 做用相同,但從新進入當前幀 
redefine <類 ID> <類文件名> 
                          -- 從新定義類代碼

disablegc <表達式>          -- 禁止對象的垃圾回收 
enablegc <表達式>           -- 容許對象的垃圾回收

!!                        -- 重複執行最後一個命令 
<n> <命令>             -- 將命令重複執行 n 次 
# <命令>               -- 放棄(不執行) 
help(或 ?)               -- 列出命令 
version                   -- 輸出版本信息 
exit(或 quit)            -- 退出調試器

<類 ID>: 帶有軟件包限定符的完整類名 
<類模式>: 帶有前導或後綴通配符 (*) 的類名 
<線程 ID>: 'threads' 命令中所報告的線程號 
<表達式>: Java(TM) 編程語言表達式。 
支持大多數常見語法。

 

普通運行Java調試方式以下:tomcat

java -agentlib:jdwp=transport=dt_socket,address=localhost:8888,server=y,
   suspend=y Hello
相關文章
相關標籤/搜索