<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA總結(jié)學(xué)習(xí)筆記

    學(xué)問大,知識多

    基于遠程怎么調(diào)試JAVA呢?

    基于遠程怎么調(diào)試JAVA呢?
    JAVA的長途調(diào)試 基于Java Platform Debugger Architecture(JPDA:Java平臺調(diào)試架構(gòu))。 JVM 自身支撐指定參數(shù)來讓java順序以調(diào)試形式啟動。虛擬機運轉(zhuǎn)在調(diào)試形式下,你只需去銜接他的響應(yīng)的監(jiān)聽端口就可以了。

    像tomcat等效勞器也都供應(yīng)了指定調(diào)試參數(shù)的設(shè)置辦法

    典型的調(diào)試參數(shù)如下
    -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n

    典型的銜接 調(diào)試端口的敕令如下,以jdk自帶的敕令行調(diào)試 東西jdb為例。

    銜接 192.29.24.62 的8888 端口
    /build/java/jdk1.6.0_03/bin/jdb -attach 192.29.24.62:8888    

    下面這句和上面采用attach參數(shù)的上面一句一樣的結(jié)果。但是采用 -connect的指定了具體了,有時從windows的機械上去銜接上面
    Linux的機械,上面阿誰不可,但是這句就可以。
    /build/java/jdk1.6.0_03/bin/jdb -connect   com.sun.jdi.SocketAttach:port=8888,hostname=192.29.24.62

    在 Eclipse 中也有長途調(diào)試 選項的了,“run” -》 “Open Debug Dialog” -》“Remote Java Application” 阿誰就是。
    在選項里面選定詳細(xì)的“項目” “代碼目次”等,填好ip、端口,最終點下面的“ 調(diào)試 ”按鈕就行了,啟動后下斷點,等等都和本機調(diào)試無異。留意的是本機的代碼和在長途機上運轉(zhuǎn)的代碼應(yīng)該是一致的

    <img style=\"WIDTH: 580px; HEIGHT: 464px\" class=\"blogimg\" border=\"0\" src=\"http://hiphotos.baidu.com/widebright/pic/item/e122e9c4eb5214a68226ac06.jpg\" width=\"580\" height=\"464\" small=\"0\" />

    ----------------jdb 用法----------------
    C:\\Program Files\\Java\\jdk1.6.0_03\\bin>jdb -help
    用法:jdb <選項> <類> <參數(shù)>

    個中選項包羅:
        -help             輸出此音訊并退出
        -sourcepath <以 \";\" 分隔的目次>
                          在個中查找源文件的目次
        -attach <地址>
                          運用規(guī)范銜接器銜接到正在指定地址運轉(zhuǎn)的 VM
        -listen <地址>
                          等候正在指定地址運轉(zhuǎn)的 VM 運用規(guī)范銜接器進行銜接
        -listenany
                          等候正在恣意可用地址運轉(zhuǎn)的 VM 運用規(guī)范銜接器進行銜接
        -launch
                          立刻啟動 VM,而不等候 \'run\' 敕令
        -listconnectors   列出此 VM 中可用的銜接器
        -connect <銜接器稱號>:<稱號 1>=<值 1>,...
                          運用定名的銜接器和列出的參數(shù)值銜接到目的 VM
        -dbgtrace [標(biāo)記] 輸出用于調(diào)試 jdb 的信息
        -tclient          在 Hotspot(TM) Performance Engine(客戶機)中運轉(zhuǎn)使用順序
        -tserver          在 Hotspot(TM) Performance Engine(效勞器)中運轉(zhuǎn)使用順序

    轉(zhuǎn)發(fā)給被調(diào)試歷程的選項:
        -v -verbose[:class|gc|jni]
                          啟用具體形式
        -D<稱號>=<值> 設(shè)置系統(tǒng)屬性
        -classpath <以 \";\" 分隔的目次>
                          列出要在個中查找類的目次
        -X<選項>        非規(guī)范目的 VM 選項

    <類> 是要開端調(diào)試的類的稱號
    <參數(shù)> 是傳遞給 <類> 的 main() 辦法的參數(shù)

    要取得敕令協(xié)助,請在 jdb 提醒符下鍵入 \'help\'

    C:\\Program Files\\Java\\jdk1.6.0_03\\bin>jdb
    正在初始化 jdb...
    > help
    ** 敕令列表 **
    connectors                -- 列出此 VM 中可用的銜接

    run [類 [參數(shù)]]        -- 開端執(zhí)行使用順序的主類

    threads [線程組]     -- 列出線程
    thread <線程 ID>        -- 設(shè)置默許線程
    suspend [線程 ID]    -- 暫停線程(默許值為 all)
    resume [線程 ID]     -- 恢復(fù)線程(默許值為 all)
    where [<線程 ID> | all] -- 轉(zhuǎn)儲線程的倉庫
    wherei [<線程 ID> | all] -- 轉(zhuǎn)儲線程的倉庫以及 pc
    up [n 幀]             -- 向上挪動線程的倉庫
    down [n 幀]           -- 向下挪動線程的倉庫
    kill <線程 ID> <表達式>   -- 中止具有給定的異常對象
    interrupt <線程 ID>     -- 中綴線程

    print <表達式>              -- 輸出表達式的值
    dump <表達式>               -- 輸出一切對象信息
    eval <表達式>               -- 核算表達式的值(與
    set = <表達式>     -- 為字段/變量/數(shù)組元素
    locals                    -- 輸出當(dāng)時倉庫幀中的一切

    classes                   -- 列出當(dāng)時已知的類
    class <類 ID>          -- 顯示已定名類的具體信息
    methods <類 ID>        -- 列出類的辦法
    fields <類 ID>         -- 列出類的字段

    threadgroups              -- 列出線程組
    threadgroup <稱號>        -- 設(shè)置當(dāng)時線程組

    stop in <類 ID>.<辦法>[(參數(shù)類型,...)]
                              -- 在辦法中設(shè)置斷點
    stop at <類 ID>:<行> -- 在行中設(shè)置斷點
    clear <類 ID>.<辦法>[(參數(shù)類型,...)]
                              -- 肅清辦法中的斷點
    clear <類 ID>:<行>   -- 肅清行中的斷點
    clear                     -- 列出斷點
    catch [uncaught|caught|all] <類 ID>|<類形式>
                              -- 呈現(xiàn)指定的異常時中綴
    ignore [uncaught|caught|all] <類 ID>|<類形式>
                              -- 關(guān)于指定的異常,作廢
    watch [access|all] <類 ID>.<字段名>
                              -- 看管對字段的拜訪/修正
    unwatch [access|all] <類 ID>.<字段名>
                              -- 中止看管對字段的拜訪/
    trace [go] methods [thread]
                              -- 跟蹤辦法的進入和退出。
                              -- 除非指定 \'go\',不然所
    trace [go] method exit | exits [thread]
                              -- 跟蹤當(dāng)時辦法的退出或所
                              -- 除非指定 \'go\',不然所
    untrace [辦法]         -- 中止跟蹤辦法的進入和/或退
    step                      -- 執(zhí)行當(dāng)時行
    step up                   -- 執(zhí)行到當(dāng)時辦法返回其調(diào)
    stepi                     -- 執(zhí)行當(dāng)時指令
    next                      -- 跳過一行(跨過挪用)
    cont                      -- 從斷點處持續(xù)執(zhí)行

    list [line number|method] -- 輸出源代碼
    use(或 sourcepath)[源文件途徑]
                              -- 顯示或更改源途徑
    exclude [<類形式>, ...|“無”]
                              -- 不申報指定類的步調(diào)或方
    classpath                 -- 從目的 VM 輸出類途徑信

    monitor <敕令>         -- 每次順序中止時執(zhí)行敕令
    monitor                   -- 列出看管器
    unmonitor <看管器號>      -- 刪除某個看管器
    read <文件名>           -- 讀取并執(zhí)行某個敕令文件

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

    pop                       -- 彈出整個倉庫,且包括當(dāng)
    reenter                   -- 與 pop 效果一樣,但重
    redefine <類 ID> <類文件名>
                              -- 從新界說類代碼

    disablegc <表達式>          -- 制止對象的渣滓收受接管
    enablegc <表達式>           -- 答應(yīng)對象的渣滓收受接管

    !!                        -- 反復(fù)執(zhí)行最終一個敕令
    <敕令>             -- 將敕令反復(fù)執(zhí)行 n 次
    # <敕令>               -- 拋棄(不執(zhí)行)
    help(或 ?)               -- 列出敕令
    version                   -- 輸出書本信息
    exit(或 quit)            -- 退出調(diào)試器

    <類 ID>: 帶有軟件包限制符的完好類名
    <類形式>: 帶有前導(dǎo)或后綴通配符 (*) 的類名
    <線程 ID>: \'threads\' 敕令中所申報的線程號
    <表達式>: Java(TM) 編程言語表達式。
    支撐大大都經(jīng)常見語法。

    可以將啟動敕令置于 \"jdb.ini\" 或 \".jdbrc\" 之中
    (兩者位于 user.home 或 user.dir 中)
    >

    ==========參考文檔=======================================


    什么是JPDA
      Java Platform Debugger Architecture(JPDA:Java平臺調(diào)試架構(gòu)) 由Java虛擬機后端和調(diào)試平臺前端構(gòu)成
      1.Java虛擬機供應(yīng)了Java調(diào)試的功用
      2.調(diào)試平臺經(jīng)過調(diào)試交互和談向Java虛擬機懇求效勞以對在虛擬機中運轉(zhuǎn)的順序進行調(diào)試
      JPDA的構(gòu)架
      JPDA經(jīng)過兩個接口和和談來完成如上的闡明,辨別是JVMTI(Java虛擬機東西接口)、JDWP(Java調(diào)試連線和談)和JDI(Java調(diào)試接口)。
      1.JVMTI界說了虛擬機應(yīng)該供應(yīng)的調(diào)試效勞,包羅調(diào)試信息(Information譬如棧信息)、調(diào)試行為(Action譬如客戶端設(shè)置一個斷點)和告訴(Notification譬如抵達某個斷點時告訴客戶端),該接口由虛擬機完成者供應(yīng)完成,并連系在虛擬機中
    2.JDWP界說調(diào)試效勞和調(diào)試器之間的通訊,包羅界說調(diào)試信息花樣和調(diào)試懇求機制
    3.JDI在言語的高條理上界說了調(diào)試者可以運用的調(diào)試接口以能便利地與長途的調(diào)試效勞進行交互,Java言語完成,調(diào)試器完成者可直接運用該接口拜訪虛擬機調(diào)試效勞。

      運轉(zhuǎn)方法
      當(dāng)虛擬機的調(diào)試效勞運轉(zhuǎn)時,虛擬機作為調(diào)試的效勞供應(yīng)端,監(jiān)聽一個銜接,而調(diào)試器經(jīng)過該銜接與虛擬機進行交互。當(dāng)前,Windows平臺的JVM供應(yīng)了兩種方法的銜接:共享內(nèi)存和 Socket銜接,共享內(nèi)存的效勞供應(yīng)端和調(diào)試端只能位于統(tǒng)一臺機,而Socket銜接則支撐分歧異機調(diào)試,即長途調(diào)試。

      虛擬機參數(shù)設(shè)置
      1.啟用調(diào)試效勞
        -Xdebug 啟用調(diào)試
        -Xrunjdwp:<sub-options> 加載JVM的JPDA參考完成庫
      2.Xrunjdwp子參數(shù)(sub-options)裝備
        Xrunjdwp子參數(shù)的裝備花樣如下
        -Xrunjdwp:[=],[=]...

      幾個例子
      -Xrunjdwp:transport=dt_socket,server=y,address=8000
      在8000端口監(jiān)聽Socket銜接,掛起VM而且不加載運轉(zhuǎn)主函數(shù)直到調(diào)試懇求抵達
      -Xrunjdwp:transport=dt_shmem,server=y,suspend=n
      選擇一個可用的共享內(nèi)存(由于沒有指address)并監(jiān)聽該內(nèi)存銜接,還加載運轉(zhuǎn)主函數(shù)
      -Xrunjdwp:transport=dt_socket,address=myhost:8000
      銜接到myhost:8000供應(yīng)的調(diào)試效勞(server=n,以調(diào)試客戶端存在),掛起VM而且不加載運轉(zhuǎn)主函數(shù)
      -Xrunjdwp:transport=dt_shmem,address=mysharedmemory
      經(jīng)過共享內(nèi)存的方法銜接到調(diào)試效勞,掛起VM而且不加載運轉(zhuǎn)主函數(shù)
      -Xrunjdwp:transport=dt_socket,server=y,address=8000,
      onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
      等候java.io.IOException被拋出,然后掛起VM并監(jiān)聽8000端口銜接,在接到調(diào)試懇求后以敕令/usr/local/bin/debugstub dt_socket myhost:8000執(zhí)行
      -Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\\bin\\debugstub.exe
      等候一個RuntimeException被拋出,然后掛起VM并監(jiān)聽一個可用的共享內(nèi)存,在接到調(diào)試懇求后以敕令d:\\bin\\debugstub.exe dt_shmem

    執(zhí)行,
    是可用的共享內(nèi)存

      啟動tomcat
    -Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=n

    以上兩行是tomcat5.5.12的catalina.bat文件中的一句,可以看出tomcat在JPDA方法下是怎樣啟動的,啟動tomcat要用catalina jpda start來啟動,不克不及用startup.bat啟動,啟動前設(shè)置好JPDA_TRANSPORT,JPDA_ADDRESS就OK了

    -------------------------------------
    Java長途調(diào)試
    其實就是運用了JDK的JPDA,在啟動效勞器(Jboss或許Tomcat等)的敕令行參數(shù)里面加上:
    -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

    以Eclipse作為調(diào)試東西的話,創(chuàng)立一個Remote Java Application,銜接參數(shù)填寫準(zhǔn)確的IP和端口(就是上面的8787)就行了

    起首,JAVA本身支撐調(diào)試功用,并供應(yīng)了一個簡略的調(diào)試東西--JDB,相似于功用強壯的GDB,JDB也是一個字符界面的調(diào)試情況,并支撐設(shè)置斷點,支撐線程線級的調(diào)試。
    ------------------------------------------------
    JAVA的調(diào)試辦法如下:
    1。起首支撐JVM,并設(shè)置參數(shù),使之任務(wù)在DEBUG形式下,參加參數(shù):-Xdebug -Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,launch=/sbin/echo
    個中,-Xdebug是告訴JVM任務(wù)在DEBUG形式下,-Xrunjdwp是告訴JVM運用(java debug wire protocol)來運轉(zhuǎn)調(diào)試情況。該參數(shù)還了一系列的調(diào)試選項:
    transport指定了調(diào)試數(shù)據(jù)的傳送方法,dt_socket是指用SOCKET形式,尚有dt_shmem指用共享內(nèi)存方法,個中,dt_shmem只合用于Windows平臺。
    server參數(shù)是指能否支撐在server形式的VM中.
    onthrow指明,當(dāng)發(fā)生該類型的Exception時,JVM就會中綴下來,進行調(diào)式。該參數(shù)可選。
    launch指明,當(dāng)JVM被中綴下來時,執(zhí)行的可執(zhí)行順序。該參數(shù)可選
    suspend指明,能否在調(diào)試客戶端樹立起來后,再執(zhí)行JVM。
    onuncaught(=y或n)指明呈現(xiàn)uncaught exception 后,能否中綴JVM的執(zhí)行.

    2。啟動調(diào)試東西。
    最簡略的調(diào)試東西就是上面提到的JDB,以上述調(diào)試用JVM為例,可以用下面的命運轉(zhuǎn)啟動JDB:
    jdb -connect com.sun.jdi.SocketAttach:port=5432,hostname=192.168.11.213
    別的,還有很多的可視化調(diào)試東西,如 eclipse,jsawt等等。Eclipses可用 ant debug來樹立一個調(diào)試辦法。

    posted on 2012-01-27 07:32 李林 閱讀(160) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲愉拍99热成人精品热久久 | 久久精品国产精品亚洲蜜月| 亚洲AV无码精品国产成人| 韩国免费一级成人毛片| 亚洲网站在线免费观看| 久久精品私人影院免费看| 亚洲av永久无码精品网站| 免费一级不卡毛片| 亚洲av无码国产精品色午夜字幕| a毛看片免费观看视频| 亚洲无av在线中文字幕| A片在线免费观看| 亚洲国产精品无码一线岛国| 日本免费高清视频| 亚洲综合激情视频| 黄页网站在线观看免费高清| 中文字幕无码亚洲欧洲日韩| 香蕉高清免费永久在线视频| 羞羞漫画在线成人漫画阅读免费| 亚洲国产精品一区二区第四页| 国产人成网在线播放VA免费| 亚洲成色www久久网站夜月| 91精品手机国产免费| 一本天堂ⅴ无码亚洲道久久| 日韩一区二区免费视频| 国产免费MV大全视频网站| 久久夜色精品国产亚洲AV动态图| 16女性下面扒开无遮挡免费| 亚洲成A人片在线播放器| 亚洲国产专区一区| 一区二区三区观看免费中文视频在线播放| 亚洲精品在线观看视频| 妞干网手机免费视频| 国产黄片不卡免费| 亚洲视频在线观看网站| 免费爱爱的视频太爽了| 国产在线播放线91免费| 亚洲一区在线视频| 中文字幕亚洲一区二区三区| 国产香蕉九九久久精品免费| 99亚洲精品卡2卡三卡4卡2卡|