第   三   章        30分鐘內學會 DEBUG

§3.1 序言

      Soft-ICE 的所有動作都發生在一個可以隨時叫出的視窗中。Soft-ICE 的所有
  指令都可以顯示在一個小視窗中,但這個視窗可以擴大到整個螢幕。當你把 Soft-
  ICE 當做其它除錯程式的助手使用時,你可能會使用小視窗。當你把 Soft-ICE 當
  獨立除錯器用時,你可能會使用大視窗。

      如果你使用原來磁片上的設定檔( S-ICE.DAT ),那視窗一開始是佔滿整個
  螢幕的。

§3.2 叫出視窗

      載入 Soft-ICE 後,你可以隨時叫出視窗。一開始你只要按 Ctrl - D 即可叫
  出 Soft-ICE 。使用 ALTKEY 的指令可以更改此熱鍵。( 參閱 §5.8 )

§3.3 由視窗中返回

      使用 X 這個指令或你叫出 Soft-ICE 的熱鍵均可以回到原先的畫面。你在
  Soft-ICE 中設定的所有中斷點此時開始啟動。

§3.4 改變視窗大小

      你可以改變 Soft-ICE 視窗的寬度和高度。在獨立模式中顯示程式碼時,改變
  視窗大小的功能特別有用。視窗的高度為 8 到 25 行。按

        Alt - ↑   使視窗變高
        Alt - ↓   使視窗變短

      使用 WIN 的指令以改變視窗的寬度。( 參閱 §5.9 )直接輸入 WIN 而不
  加參數會在下面兩種模式中切換:

        WIDE 模式   --- 佔滿整個螢幕
        NARROW 模式 --- 46 個字元寬

      有些指令像 D 、E 、R 、U ,使用 WIDE 模式以顯示更多訊息時較為方便。

§3.5 移動視窗

      Soft-ICE 的視窗是可以移動且可以定位在螢幕上的任何地方。這功能在 NARROW
  模式下特別有用。在你需要時移動視窗以便觀看螢幕上被視窗擋到的地方。你可以
  用下列按鍵控制螢幕的移動:

        Ctrl - ↑   向上移一行
        Ctrl - ↓   向下移一行
        Ctrl - →   向右移一列
        Ctrl - ←   向左移一列

§3.6 行編輯按鍵

      Soft-ICE 容易使用的行編輯器讓你可以叫回並編輯上一個指令。它的功能類似
  那些有名的 CED 行編輯器。以下按鍵可以幫助你在命令窗中編輯指令:

        →   ---  游標右移
        ←   ---  游標左移
        Ins  ---  切換插入模式
        Del  ---  消除現在字元
        Home ---  把游標移到一行的開頭
        End  ---  把游標移到一行的結尾
        ↑   ---  顯示上一個指令
        ↓   ---  顯示下一個指令
        Shift - ↑  ---  顯示向上捲一行
        Shift - ↓  ---  顯示向下捲一行
        Page Up   ---  顯示向上捲一頁
        Page Down ---  顯示向下捲一頁
        BackSpace ---  消除前一個字元
        Esc  ---  取消目前命令

      當游標在資料窗或程式碼窗時,另有特殊的按鍵,這在後面將會討論到。

§3.7 動作狀態行

      在螢幕底部的狀態行提供指令語法的輔助。

§3.8 指令語法

      Soft-ICE 是個由指令操控的除錯工具。要令 Soft-ICE 有動作,你要下指令給
  它。指令可以因不同參數而有改變。

      所有的指令都是 1 到 6 個字元的字串且不分大小寫。所有的參數都是字串或
  運算式。

      運算式是典型的數字,也可以是數字和運算子的結合。所有的數字均以 16 進
  位表示。一個位元組 (byte) 參數有 2 位,字組 (word) 參數有 4 位。雙字組
  (double word) 是兩個由 : 分隔的字組參數。以下是一些參數的例子:

               12  ---  位元組參數
             10FF  ---  字組參數
        E000:0100  ---  雙字組參數

      暫存器在運算式中可以拿來當位元組或字組參數用。例如: U CS:IP -10 的指
  令會從現在指令指標所指位址向前 10 byte 開始反組譯。以下的暫存器名稱可以用
  在運算式中:

         AL 、AH 、AX 、BL 、BH 、BX 、CL 、CH 、CX 、DL 、DH 、DX 、DI 、
         SI 、BP 、SP 、IP 、CS 、DS 、ES 、SS 、FL

  §3.8.1 指定記憶體位址

        許多 Soft-ICE 的指令要求以記憶體位址當參數。一個記憶體位址是由兩個
    16 位元的字組中間以分號 (:) 分隔而組成的。第一個字組表示節段位址 (segment
    address) 而第二個字組表示差距位址 (offset segment) 。

        公用符號可以在所有 Soft-ICE 指令中用來取代位址。公用符號必需先由
    Soft-ICE 的程式載入器 (LDR.EXE) 載入。參閱第七章以取得使用公用符號的完
    整說明。

        Soft-ICE 運算式的運算器接受一些特殊字元和位址的使用。這些字元是:

                $  ---  現在 CS:IP 所指的位址
            @位址  ---  間接雙字組
          .number  ---  原始程式碼行號

        當你要輸入目前指令指標的位址時,可以用 $ 代替 CS:IP 。

        使用 @ 可以讓你參考到位址所指處的雙字組。你可以使用多層的 @ 。

        如果用 . 來代表位址,它是用來代表原程式碼中的行號,而非實際的位址。
    這只有在原始程式碼有載入的情形下才能使用。這種情況下,位址是以 10 進位
    表示。

        例如:

            U.1234  ---  從原始程式碼第 1234 行開始反組譯
            U $-10  ---  從目前指令指標所指處向前 10 byte 開始反組譯
          G @SS:SP  ---  假如你目前正在第一個中斷程序,下這個指令會在堆疊的
                         返回位址設個暫時中斷點並跳過此中斷程序。

§3.9 功能鍵

      功能鍵可以代替一串 Soft-ICE 中之指令。功能鍵可以由命令行設定或從
  S-ICE.DAT 中定義。

      Soft-ICE 磁片上原來的 S-ICE.DAT 已經對 12 個功能鍵有設定。你可以在任
  何時候改變任何一個設定。個鍵定義如下表所示。這樣設計是為了方便微軟的
  CodeView 的使用者。

         F1  ---  顯示一般輔助畫面            ( H; )
         F2  ---  在暫存器窗中切換            ( ^WR; )
         F3  ---  改變目前原始碼的模式        ( ^SRC; )
         F4  ---  回復視窗                    ( ^RS; )
         F5  ---  回到原程式                  ( ^X; )
         F6  ---  在命令窗中和程式碼窗中切換  ( ^EC; )
         F7  ---  執行到游標所在那行          ( ^HERE; )
         F8  ---  單步執行                    ( ^T; )
         F9  ---  在游標所在那行設中斷點      ( ^BPX; )
        F10  ---  單步執行                    ( ^P; )
        F11  ---  執行到返回位址              ( ^G @SS:SP; )
        F12  ---  顯示 Soft-ICE 的版別        ( ^VER; )

      指令前的 ^ 會讓這個指令不顯示出來。指令後的 ; 則代表按下 Enter 。輸入
  FKEY 的指令可以顯示目前功能鍵所代表的意義。要使用功能鍵直接按下功能鍵即可
  ,不需再鍵入指令。要自定功能鍵,參閱 §5.8 FKEY 指令的解說或第六章有關
  在 S-ICE.DAT 設定功能鍵的部份。

§3.10 輔助

      利用輔助的指令可以得到有關指令的簡單解說、語法和使用例子。要得到輔助
  的資訊,鍵入:

                      ? 或 H  ---  顯示所有指令和運算子的簡短解說

            ? 指令 或 H 指令  ---  顯示關於指令語法和例子更詳細的資訊

        ? 運算式 或 H 運算式  ---  把運算式的結果以 16 、10 進位及 ASCII 碼
                                   顯示出來

§3.11 課程

    (好多喔....偷懶一下,跳過去吧!)