<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## 1.3 什么是調試 編程本身是一個復雜的過程,并且由人類而不是機器完成,所以經常會發生一些錯誤。由于一些奇怪的原因,程序中的錯誤稱為bug,而追蹤定位bug并且將其修正的過程則稱為調試(Debug)。 程序中發生的錯誤有不同的種類,知道如何分辨不同的錯誤可以更快速地定位bug的位置。 ### 1.3.1 編譯時錯誤 編譯器只能編譯語法正確的程序,否則會導致編譯過程失敗,無法運行程序。__語法__指的是程序結構以及與該結構相關的規則。 以英語語法為例,一個句子必須以大寫字母開頭,句號結尾。諸如“this sentence contains a syntax error.”和“So does this one”這樣的兩個句子都包含語法錯誤。 對大多數讀者來說,少量語法錯誤并不是什么大問題。這就是為什么我們可以毫無障礙地閱讀E.E.卡明斯的詩歌。 但是編譯器并不是如此的寬容。如果你的程序中出現一處語法錯誤,編譯器就會輸出錯誤消息并且退出,而你就無法再運行自己的程序。 更糟糕的是,C++中具有比英語更多的語法規則,并且大多數時候你從編譯器得到的錯誤消息都沒有太大幫助。在你剛開始學習編程的時候,你很可能會花費大量的時間查找語法錯誤。不過隨著你經驗日益豐富,發生和查找錯誤需要的時間都會越來越少。 ### 1.3.2 運行時錯誤 第二種錯誤是運行時錯誤。將其稱為運行時錯誤,是因為該錯誤只有在程序運行時才會發生。 接下來的幾周我們要寫的各種程序中,運行時錯誤很少發生。所以你可能需要一段時間才會遇到1。 > 注釋:1這不是個好事情嗎?——譯者注 ### 1.3.3 邏輯和語義錯誤 第三種錯誤是__邏輯__和__語義__錯誤。如果程序中出現邏輯和語義錯誤,計算機不會產生任何錯誤消息,編譯和運行過程都會成功。但是程序并沒有做它應該做的,而是做了其他的事。只有在極少情況下它才會做你讓它做的。 問題在于你寫的程序不是你本意想寫的程序,程序的意義(語義)有錯誤。識別邏輯錯誤是一件很棘手的事情,因為它需要你回頭查看程序的輸出并且嘗試發現哪里出錯了。 ### 1.3.4 實驗調試 在本書的學習過程中,你應當獲得的最重要的技能之一就是調試。盡管錯誤的出現讓你沮喪,但是調試是編程過程中最需要腦力、最富有挑戰性而且最有趣的部分了。 在某些方面調試就像偵察。你需要面對線索,推斷出具體過程和事件,這些過程和事件能夠得到你所看到的結果。 同時,調試又像是科學實驗。一旦你想出來哪里可能出錯了,你就會修改你的程序再次嘗試。如果你的假設成立,你可以預測到修改后的結果并離可工作的程序更近一步。如果假設失敗了,你需要提出一個新的假設。正如福爾摩斯所說,“當你排除了一切不可能的因素之后,剩下的無論看起來有多么不合理,也一定是事實。”(來自柯南道爾的《四個人的簽名》)。 對一些人來說,編程和調試是同一件事情。也就是說,編程的過程就是逐步調試直到程序完成你想要的功能的過程。這種觀點表明,任何時候你都應該從一個可以正常運行的程序入手,然后進行小的改動并調試通過,這樣你的程序可以一直工作。 比如,Linux操作系統包含成千上萬行代碼,但是它最開始也只是 Linux Torvalds用于探索英特爾 80386芯片的簡單程序。Larry Greenfield說:“Linus早期的工程之一就是一段在輸出AAAA和BBBB之間切換的程序。然后進化成了Linux。”(來自Linux用戶指導測試版1)。 在稍后的章節里,我會提出關于調試和編程練習的更多建議。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看