整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Java程序員,你會(huì)在Eclipse IDE中調(diào)試代

          Java程序員,你會(huì)在Eclipse IDE中調(diào)試代碼嗎?

          試是所有Java程序員的必備技能。本文將從初學(xué)者指南開始,幫助程序員學(xué)習(xí)調(diào)試。在本文的第二部分,你還可以看到有關(guān)新版Eclipse Oxygen中如何調(diào)試的講解。

          調(diào)試是從程序中定位和刪除bug或異常的常規(guī)過程。對(duì)于Java程序員來說,這是一個(gè)必須具備的技能,因?yàn)樗兄谡业皆诖a審查過程中不可見的微妙錯(cuò)誤,或者僅在特定情況下發(fā)生的錯(cuò)誤。Eclipse Java IDE在“Debug Perspective”選項(xiàng)下提供了許多調(diào)試工具和視圖,可幫程序員高效調(diào)試。

          初學(xué)者指南——快速啟動(dòng)調(diào)試

          以下是一些快速提示和工具,可幫助程序員快速開始調(diào)試Java項(xiàng)目。

          1.啟動(dòng)和調(diào)試Java程序

          可以通過從Package Explorer中右鍵單擊Java編輯器類文件來簡(jiǎn)單地調(diào)試Java程序。 選擇Debug As→Java Application,或者使用Alt + Shift + D,J代替快捷方式。

          在大多數(shù)情況下,用戶可以在調(diào)試時(shí)編輯和保存代碼,而無需重新啟動(dòng)程序。這適用于HCR(熱代碼替換)支持,HCR已被特別添加為標(biāo)準(zhǔn)Java技術(shù),以促進(jìn)實(shí)驗(yàn)開發(fā)并促進(jìn)迭代。

          2.斷點(diǎn)

          斷點(diǎn)是一個(gè)信號(hào),告訴調(diào)試器在代碼中的某一點(diǎn)暫時(shí)中止程序的執(zhí)行。

          要在源代碼中定義斷點(diǎn),請(qǐng)右鍵單擊Java編輯器中的左邊距,然后選擇切換斷點(diǎn)。或者,您可以雙擊此位置。“斷點(diǎn)”視圖允許程序員刪除和停用斷點(diǎn)并修改其屬性。

          所有斷點(diǎn)可以使用跳過所有斷點(diǎn)啟用/禁用。斷點(diǎn)也可以導(dǎo)入/導(dǎo)出到工作區(qū)。

          3. Debug perspective

          debug perspective提供了可用于對(duì)斷點(diǎn),變量,調(diào)試,控制臺(tái)等進(jìn)行故障排除的其他視圖。當(dāng)在調(diào)試模式下啟動(dòng)Java程序時(shí),會(huì)提示用戶切換到debug perspective。

          • debug perspective - 可視化調(diào)用堆棧并提供操作。

          • Breakpoints view - 顯示所有斷點(diǎn)。

          • Variables/Expression view - 顯示聲明的變量及其值。在選定的變量或表達(dá)式上按Ctrl + Shift + d或Ctrl + Shift + i顯示其值。您還可以在表達(dá)式/變量上添加永久性表,然后在調(diào)試開啟時(shí),將在“表達(dá)式”視圖中顯示。

          • Display view - 允許在調(diào)試期間檢查變量,表達(dá)式或所選文本的值。

          • Console view - 程序輸出如下所示。

          4.按步驟調(diào)試

          Eclipse Platform通過在工具欄中提供按鈕和快捷鍵的方式來幫助程序員進(jìn)行調(diào)試,以控制程序的執(zhí)行。

          調(diào)試復(fù)雜場(chǎng)景的高級(jí)工具

          本節(jié)將為您提供更多高級(jí)提示和技巧,以調(diào)試Java項(xiàng)目。Eclipse Oxygen版本包含許多Java調(diào)試的極大改進(jìn)。

          1、觀察點(diǎn),異常斷點(diǎn),條件斷點(diǎn)

          • 觀察點(diǎn) - 觀察點(diǎn)是特定的斷點(diǎn),只要給定表達(dá)式/字段的值發(fā)生更改,而不指定可能發(fā)生的位置,就會(huì)停止應(yīng)用程序的執(zhí)行。 用戶可以通過“斷點(diǎn)屬性”...指定監(jiān)視表達(dá)式被訪問,修改或同時(shí)停止執(zhí)行


          • 異常斷點(diǎn) - 使用添加Java異常斷點(diǎn)指定拋出異常的斷點(diǎn)。NullPointerException的斷點(diǎn)將在每次拋出此異常時(shí)停止。


          • 條件斷點(diǎn) - Eclipse用戶可以創(chuàng)建條件來限制斷點(diǎn)的激活。

          只有當(dāng)布爾值b為真時(shí),才會(huì)激活斷點(diǎn)。可以提供命中計(jì)數(shù)以在斷點(diǎn)的第n個(gè)命中停止執(zhí)行。斷點(diǎn)被禁用,直到它被重新啟用或其命中計(jì)數(shù)更改或程序結(jié)束為止。

          2.遠(yuǎn)程調(diào)試

          Eclipse IDE允許程序員調(diào)試在另一個(gè)Java虛擬機(jī)(JVM)上甚至另一臺(tái)機(jī)器上運(yùn)行的應(yīng)用程序。要啟用遠(yuǎn)程調(diào)試,需要啟動(dòng)具有某些標(biāo)志的Java應(yīng)用程序。連接類型可以指定為Socket Attach或Socket Listen。Socket Listen支持多個(gè)傳入連接。

          Eclipse Oxygen的新功能

          以下是添加到Eclipse Java IDE版本中的新功能。

          • 追蹤點(diǎn)

          Eclipse平臺(tái)中的一個(gè)新功能,允許用戶創(chuàng)建條件斷點(diǎn)來打印消息,而不會(huì)在斷點(diǎn)處停止并使代碼塊混亂。


          Eclipse Platform使用systrace模板創(chuàng)建了tracepoint。

          • 觸發(fā)點(diǎn)

          程序員可激活觸發(fā)點(diǎn),為工作區(qū)中的斷點(diǎn)定義一組觸發(fā)點(diǎn)。觸發(fā)器最初被抑制的所有其他斷點(diǎn)只有在觸發(fā)點(diǎn)被觸發(fā)之后才會(huì)被擊中。觸發(fā)點(diǎn)被觸發(fā)后,所有的觸發(fā)器被禁用,并且在運(yùn)行后將被重新啟用。


          通過使用斷點(diǎn)屬性,可以通過“斷點(diǎn)”視圖的對(duì)話框或詳細(xì)信息窗格將任何斷點(diǎn)設(shè)置為觸發(fā)點(diǎn)。


          • 邏輯結(jié)構(gòu)

          在 Variables view中,集合對(duì)象直接顯示其包含的元素,而不是其內(nèi)部結(jié)構(gòu)。默認(rèn)情況下,在Oxygen釋放中激活邏輯結(jié)構(gòu),可以關(guān)閉顯示邏輯結(jié)構(gòu)以顯示內(nèi)部結(jié)構(gòu)。

          顯示邏輯結(jié)構(gòu)上下文菜單允許程序員創(chuàng)建,選擇或編輯表示。

          • 步驟操作后的方法結(jié)果

          在調(diào)試過程中,在“進(jìn)入”,“逐步”或“返回”期間觀察到的最后一個(gè)方法的結(jié)果(每次返回或拋出)在“變量”視圖中顯示為第一行。

          • 啟動(dòng)組

          啟動(dòng)組在Oxygen中也是新增功能,啟動(dòng)組啟動(dòng)配置類型允許按順序啟動(dòng)多個(gè)其他配置,并在啟動(dòng)每個(gè)組成員后執(zhí)行可配置的操作。可以通過運(yùn)行→運(yùn)行配置...或運(yùn)行→調(diào)試配置...對(duì)話框創(chuàng)建新的啟動(dòng)組。

          • 斷點(diǎn)分組和排序

          Eclipse用戶現(xiàn)在可以根據(jù)Eclipse Oxygen中的不同類別對(duì)斷點(diǎn)進(jìn)行分組。斷點(diǎn)工作集定義了一組斷點(diǎn)。用戶可以在工作集上執(zhí)行啟用/禁用操作。

          、Eclipse的基本認(rèn)識(shí):Eclipse是Java以及JavaEE開發(fā)的IDE(integreated Development Environment,集成開發(fā)環(huán)境)之一,是目前軟件企業(yè)使用最多的一種IDE。Ecplise最初是IBM的產(chǎn)品,在2001年交給了開源組織來維護(hù),現(xiàn)在是非盈利組織Eclipse基金會(huì)(Ecplise Foundation)來管理。

          - 下載在官網(wǎng)www.eclipse.org中下載。(Eclipse的安裝很簡(jiǎn)單,直接解壓下載的壓縮文件即可。)

          2、Eclipse基本設(shè)置(Window -> Preferences)

          - 工作環(huán)境下的字符編碼的設(shè)置:(一般設(shè)置為utf-8,否則按照默認(rèn)的gbk在進(jìn)行web編程時(shí)會(huì)出現(xiàn)亂碼的問題)

          - JRE設(shè)置:如果在系統(tǒng)環(huán)境變量中設(shè)置了JAVA_HOME,則會(huì)默認(rèn)使用JAVA_HOME的設(shè)置。

          - 編譯器設(shè)置:

          - 默認(rèn)Web瀏覽器配置:默認(rèn)情況下,Ecplise使用的是內(nèi)部瀏覽器,但也可以指定為外部瀏覽器。

          - 添加外部瀏覽器:

          - 修改JSP、HTML文件的默認(rèn)字符編碼:

          - HTML的字符編碼格式默認(rèn)為utf-8:

          2、Eclipse文件相關(guān)常用的快捷鍵:

          - Ctrl + N:新建一個(gè)工程、文件、文件夾等內(nèi)容。

          - Ctrl + M:窗口最大化/還原。

          - Alt + Enter:打開被選中的工程、包、文件等的屬性窗口。

          - Ctrl + F11:以調(diào)試模式運(yùn)行程序。

          - F2:重命名工程名、文件名。

          - Ctrl + E:打開編輯窗口查看目錄。

          - Ctrl + Page Up:切換到當(dāng)前編輯窗口的上一個(gè)窗口。

          - Ctrl + Page Down:切換到當(dāng)前編輯窗口的下一個(gè)窗口。

          3、Eclipse編寫代碼時(shí)常用的快捷鍵:

          - Ctrl + Alt + 向下的箭頭:向下賦值光標(biāo)所在行內(nèi)容或者選中內(nèi)容。

          - Ctrl + Alt + 向上的箭頭:向上賦值光標(biāo)所在行內(nèi)容或者選中內(nèi)容。

          - Alt + 向下的箭頭:向下移動(dòng)光標(biāo)所在行內(nèi)容或者選中內(nèi)容。

          - Alt + 向上的箭頭:向上移動(dòng)光標(biāo)所在行內(nèi)容或者選中內(nèi)容。

          - Ctrl + 1: 給出解決方案。

          - Alt + ?:顯示自動(dòng)提示功能。

          - Alt + Shift + Z:對(duì)選中代碼進(jìn)行Surrount With。

          - Alt + Shift + S:彈出Source菜單。(彈出菜單后,根據(jù)顯示的字母下劃線提示選擇)

          - Ctrl + /:行注釋與解除注釋。

          - Ctrl + Shift + /:塊注釋。

          - Ctrl + Shift + \:解除塊注釋。

          - Ctrl + Shift + F:格式化代碼。

          - Alt + Shift + L:將選中內(nèi)容抽取為變量。

          - Alt + Shift + M:將選中內(nèi)容抽取為方法。

          4、Eclipse打印輸出結(jié)果:

          a、選中要打印的內(nèi)容;b、Alt + ?,彈出幫助信息;c、按向上箭頭一下,然后按下enter鍵即可。

          5、Eclipse查看源碼時(shí)常用的快捷鍵:

          - Ctrl + T:查看類的繼承關(guān)系、實(shí)現(xiàn)關(guān)系。

          - Ctrl + O:查看類的結(jié)構(gòu)。

          - Ctrl + Shift + T:打開查看類窗口。

          - 查看類或者方法的定義:鼠標(biāo)懸浮在類或者方法上,同時(shí)按下Ctrl鍵。(顯示下劃線后單擊即可進(jìn)入類或者方法的定義)

          6、Eclipse其他快捷鍵:

          - Ctrl + Shift + 向左箭頭或者向右箭頭:快速選擇一個(gè)單詞。

          - Shift + Home 或者是 End:從光標(biāo)當(dāng)前位置,快速選擇到行首或者行尾。

          - Shift + 向上箭頭或者向下箭頭:從光標(biāo)當(dāng)前位置,快速選擇到上一行或者下一行。

          者:為了美好的明天

          來源:https://javapapers.com/core-java/system-out-println/

          什么是System.out.println()

          System.out.println是一個(gè)Java語句,一般情況下是將傳遞的參數(shù),打印到控制臺(tái)。

          System:是 java.lang包中的一個(gè)final類

          根據(jù) javadoc,“java.lang.System該類提供的設(shè)施包括標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出流; 訪問外部定義的屬性和環(huán)境變量; 一種加載文件和庫(kù)的方法; 以及用于快速?gòu)?fù)制數(shù)組等一部分的實(shí)用方法… ”

          out:是System類的靜態(tài)成員字段,類型為PrintStream。

          public static final PrintStream out
          

          他在啟動(dòng)時(shí)就會(huì)被實(shí)例化,并與主機(jī)的標(biāo)準(zhǔn)輸出控制臺(tái)進(jìn)行映射。該流在實(shí)例化之后立即打開,并準(zhǔn)備接受數(shù)據(jù)。

          println:是PrintStream類的一個(gè)方法。println打印(參數(shù)內(nèi)容+換行符) 到控制臺(tái)。

          PrintStream類中有多個(gè)重載的println方法。每個(gè)println是通過調(diào)用print方法并添加一個(gè)換行符實(shí)現(xiàn)的。print方法是通過調(diào)用write方法實(shí)現(xiàn)的。

          System.out.println() 結(jié)構(gòu)圖如下:

          以下是JDK源中System.out.println的骨架結(jié)構(gòu),和代碼片段。

          UML圖

          部分代碼段:

          public final class System {
           static PrintStream out;
           static PrintStream err;
           static InputStream in;
           ...
          }
          public class PrintStream extends FilterOutputStream {
           //out object is inherited from FilterOutputStream class
           public void println() {
           ...
          }
          

          輸出重定向——改變輸出路徑

          out對(duì)象可以自定義的。在啟動(dòng)時(shí)由java運(yùn)行時(shí)環(huán)境初始化,并且可以在執(zhí)行期間由開發(fā)人員更改。代替在默認(rèn)情況下的標(biāo)準(zhǔn)輸出。

          當(dāng)您通過命令行運(yùn)行程序時(shí),輸出將打印在同一個(gè)命令窗口中。我們可以使用setOut方法來改變這種行為。

          在以下示例中,我將輸出重定向到同一目錄中的文本文件。

          public class ChangeOut {
           public static void main(String args[]) {
           try {
           System.setOut(new PrintStream(new FileOutputStream("log.txt")));
           System.out.println("Now the output is redirected!");
           } catch(Exception e) {}
           }
          }
          

          System.out.println性能分析

          有一個(gè)普遍的觀念需要大家知道——System.out.println性能并不好。

          當(dāng)我們深入分析時(shí),其調(diào)用順序如下println - > print - > write()+ newLine()。這個(gè)順序流是Sun / Oracle JDK的實(shí)現(xiàn)。

          write()和newLine()都包含一個(gè)synchronized塊。同步有一點(diǎn)開銷,但更多的是添加字符到緩沖區(qū)和打印的開銷更大。

          當(dāng)我們運(yùn)行性能分析時(shí),運(yùn)行多個(gè)System.out.println并記錄時(shí)間,執(zhí)行時(shí)間會(huì)按比例增加。當(dāng)打印超過50個(gè)字符并打印超過50,000行時(shí),性能下降。

          當(dāng)然這一切都取決于我們使用的場(chǎng)景。不過無論如何請(qǐng)勿使用System.out.println打印日志( logging)到stdout。

          System.out.println VS 日志記錄組件(Log4j等)

          Log4J具有多種記錄級(jí)別。如果我們正在編寫一個(gè)小程序,只是為了實(shí)驗(yàn)/學(xué)習(xí)目的那么使用 System.out.println 就很不錯(cuò)。

          但當(dāng)我們開發(fā)生產(chǎn)質(zhì)量軟件時(shí),我們應(yīng)該注意到應(yīng)該使用記錄組件(log4j等),并且應(yīng)該避免使用System.out.println。為什么?

          • 靈活性:log4j的記錄器提供了多種記錄級(jí)別。我們可以相應(yīng)地分隔日志信息。例如,X消息只能在PRODUCTION上打印,Y消息應(yīng)打印在ERROR等上。
          • 可重構(gòu)性:log4j只需一個(gè)參數(shù)更改即可關(guān)閉所有日志記錄。
          • 可維護(hù)性:想象一下,如果我們有數(shù)百個(gè)System.out.println全部通過應(yīng)用程序散落,那么在一段時(shí)間內(nèi)將難以維護(hù)程序。
          • 粒度:在應(yīng)用程序中,每個(gè)類都可以有不同的記錄器并相應(yīng)地進(jìn)行控制。
          • 實(shí)用性:在System.out中限制重定向消息的選項(xiàng),但是如果是記錄器(like log4j),則可以提供多種選項(xiàng)。我們甚至可以創(chuàng)建自定義輸出選項(xiàng)并將其重定向。

          所以我們不應(yīng)該使用System.out.println進(jìn)行日志記錄和調(diào)試(logging and debugging)

          靜態(tài)導(dǎo)入來縮短System.out.println

          有時(shí)我們覺得System.out.println是一個(gè)很長(zhǎng)的語句要打印。靜態(tài)導(dǎo)入可能會(huì)縮短一點(diǎn),但不推薦使用,因?yàn)樗鼘?dǎo)致可讀性差。

          我只是使用這種情況來解釋靜態(tài)導(dǎo)入,并避免在下面的情況下使用它。

          import static java.lang.System.out;
          public class ShortSOP {
           public static void main(String[] args) {
           out.println("Hello, world");
           }
          }
          

          不靜態(tài)導(dǎo)入的話直接寫out.println會(huì)提示編譯錯(cuò)誤的。

          System.err和System.in

          作為相關(guān)部分,接下來介紹一下“err”和“in”。'in'與InputStream相關(guān)聯(lián)。與“out”相對(duì),“in”用于從標(biāo)準(zhǔn)控制臺(tái)通用鍵盤獲取輸入。

          'err'與PrintStream相關(guān)聯(lián),并將參數(shù)打印到標(biāo)準(zhǔn)錯(cuò)誤輸出流。當(dāng)您使用eclipse等的IDE時(shí),可以看到“out”和“err”之間的輸出差異。


          主站蜘蛛池模板: 日韩亚洲一区二区三区| 精品女同一区二区三区在线| 在线精品动漫一区二区无广告| 国产凸凹视频一区二区| 久99精品视频在线观看婷亚洲片国产一区一级在线| 中文字幕日韩欧美一区二区三区| 国产亚洲福利精品一区二区| 亚洲视频在线一区二区| 久久精品免费一区二区三区| 亚洲天堂一区二区三区| 国产精品一区二区综合| 国精产品一区二区三区糖心| 国产成人精品第一区二区| 武侠古典一区二区三区中文| 中文字幕一区二区人妻性色| 国产成人一区二区三中文| 国产精品一区二区久久精品无码| 亚洲一区综合在线播放| 日本一区中文字幕日本一二三区视频| 国产福利电影一区二区三区久久老子无码午夜伦不 | 三上悠亚一区二区观看| 亚洲美女一区二区三区| 日韩一区二区精品观看| 亚洲AV无码一区二区二三区入口| 欧美人妻一区黄a片| 日产一区日产2区| 国产福利酱国产一区二区| 少妇无码AV无码一区| 国产精品无码一区二区三区毛片| 视频一区精品自拍| 国产精品538一区二区在线| 亚洲日本一区二区三区| 日本在线观看一区二区三区| 中文字幕一区日韩精品| 国产一区二区三区在线2021| 国产伦精品一区二区三区无广告 | 亚洲av永久无码一区二区三区| 亚洲欧洲一区二区三区| 欧美av色香蕉一区二区蜜桃小说| 国产爆乳无码一区二区麻豆| 亚洲av高清在线观看一区二区|