如需調試程式引擎中輸入和輸出數據流的概觀,請參閱 輸入和輸出。
輸入
如果用戶端上呼叫 Input 方法,引擎會要求其所有客戶端的輸入。 輸入會傳回給 Input 的呼叫端。
輸入回呼
當引擎向用戶端要求輸入時,它會使用向該客戶端註冊的 IDebugInputCallbacks 物件。 IDebugInputCallbacks 物件可以使用 SetInputCallbacks 向客戶端註冊。 每個用戶端最多可以有一個已向它註冊的 IDebugInputCallbacks 物件。
輸入請求由引擎呼叫 IDebugInputCallbacks::StartInput 方法開始。 這會通知 IDebugInputCallbacks 物件引擎現在正在等候輸入。
如果 IDebugInputCallbacks 物件有引擎的一些輸入,它可以呼叫任何用戶端的 ReturnInput 方法。 呼叫 ReturnInput 方法之後,引擎將不會再接受任何輸入。 此方法的後續呼叫端將會被告知未收到輸入。
然後引擎會呼叫 IDebugInputCallbacks::EndInput ,表示它已停止等候輸入。
最後,引擎將使用 IDebugOutputCallbacks::Output 方法,將這個輸入回傳至每個用戶端已註冊的 IDebugOutputCallbacks 物件(除了用來提供輸入的那個用戶端),並將位掩碼設定為 DEBUG_OUTPUT_PROMPT。
輸出
輸出可能會使用數個用戶端方法傳送至引擎,例如 Output 和 OutputVaList。 收到輸出時,引擎會將它傳送至某些用戶端。
用戶端會使用 輸出遮罩 來指出他們感興趣的輸出類型。 每當引擎產生輸出時,會伴隨一個標記來指定其輸出類型。 如果輸出類型符合客戶端的輸出遮罩,用戶端將會收到輸出。 輸出遮罩可藉由呼叫 SetOutputMask 來設定,並使用 GetOutputMask 進行查詢。 如需輸出遮罩值的詳細數據 ,請參閱DEBUG_OUTPUT_XXX 。
引擎將傳送輸出至的用戶端清單是由 輸出控制控制。 輸出控制通常會設定為將輸出傳送至所有用戶端,不過,您可以使用 ControlledOutput 和 ControlledOutputVaList 暫時變更。 如需輸出控件值的詳細資訊 ,請參閱DEBUG_OUTCTL_XXX 。
輸出可能會由引擎緩衝處理。 如果將多個輸出片段傳遞至引擎,它可能會收集它們,並將其作為一個大型片段傳送給客戶端。 若要排清此緩衝區,請使用 FlushCallbacks。
每個客戶端物件都有 輸出寬度,這是客戶端物件的輸出顯示寬度。 雖然此寬度僅做為提示使用,但某些命令和延伸模組函式會根據此寬度來格式化其輸出。 寬度是由 GetOutputWidth 方法傳回,而且可以使用 SetOutputWidth 方法來設定。
輸出回調函數
當引擎將輸出傳送至用戶端時,它會使用向客戶端註冊的 IDebugOutputCallbacks 物件。 IDebugOutputCallbacks 物件可以使用 SetOutputCallbacks 向客戶端註冊。 每個用戶端最多可以有一個已向它註冊的 IDebugInputCallbacks 物件。
若要傳送輸出,引擎會呼叫 IDebugOutputCallbacks::Output 方法。
輸出行前置詞
每個客戶端物件都有一個 輸出行前置詞 ,該前置詞會加在每一行傳送至與客戶端物件相關聯的輸出回呼的輸出行前面。 這可用於縮排,或將識別標記放在每一行輸出上。
輸出行前置詞是由 GetOutputLinePrefix 傳回,而且可以使用 SetOutputLinePrefix 進行設定。 若要暫時變更輸出行前置詞,稍後再重新變更它,請使用 PushOutputLinePrefix 和 PopOutputLinePrefix。
記錄檔
調試程式引擎支援開啟記錄檔來記錄偵錯會話。 最多一次可以開啟一個記錄檔。 傳送到輸出回呼函數的輸出也會傳送到這個記錄檔(除非設定為不記錄)。
若要開啟記錄檔,請使用 OpenLogFile2 (或 OpenLogFile)。 GetLogFile2 (或 GetLogFile) 方法會傳回目前開啟的記錄檔。 若要關閉記錄檔,請使用 CloseLogFile。
SetLogMask 方法可用來篩選傳送至記錄檔的輸出,而 GetLogMask 會傳回目前的記錄檔篩選。
提示
在互動式偵錯會話中,提示可用來向使用者指出調試程式正在等候用戶輸入。 提示會使用 OutputPrompt 和 OutputPromptVaList 方法傳送至輸出回呼。 GetPromptText 會傳回標準提示的內容。