使用輸入和輸出

如需偵錯工具引擎中輸入和輸出資料流程的概觀,請參閱 輸入和輸出

輸入

如果用戶端上呼叫 Input 方法,引擎會向其所有用戶端要求輸入。 輸入會傳回給 Input的呼叫端。

輸入回呼

當引擎向用戶端要求輸入時,它會使用向該用戶端註冊的 IDebugInputCallbacks 物件。 IDebugInputCallbacks物件可以使用SetInputCallbacks向用戶端註冊。 每個用戶端最多可以有一個已向它註冊的 IDebugInputCallbacks 物件。

輸入的要求會從呼叫 IDebugInputCallbacks::StartInput 方法的引擎開始。 這會通知 IDebugInputCallbacks 物件,引擎現在正在等候輸入。

如果 IDebugInputCallbacks 物件有引擎的一些輸入,它可以呼叫任何用戶端的 ReturnInput 方法。 呼叫 ReturnInput 方法之後,引擎將不會再接受任何輸入。 此方法的後續呼叫端將會收到未收到輸入的通知。

引擎接著會呼叫 IDebugInputCallbacks::EndInput ,指出它已停止等候輸入。

最後,引擎會將此輸入回應至每個用戶端的已註冊 IDebugOutputCallbacks 物件 (,但使用 IDebugOutputCallbacks::Output 將位元遮罩設定為 DEBUG_OUTPUT_PROMPT 來提供輸入) 。

輸出

輸出可以使用數個用戶端方法傳送至引擎,例如 OutputOutputVaList。 在接收輸出時,引擎會將它傳送給某些用戶端。

用戶端會使用 輸出遮罩 來指出他們感興趣的輸出類型。 每當引擎產生輸出時,它都會伴隨指定其輸出類型的遮罩。 如果輸出類型符合用戶端的輸出遮罩,用戶端將會收到輸出。 輸出遮罩可以藉由呼叫 SetOutputMask 來設定,並使用 GetOutputMask進行查詢。 如需輸出遮罩值的詳細資料 ,請參閱DEBUG_OUTPUT_XXX

引擎將傳送輸出至 的用戶端清單是由 輸出控制項所控制。 一般而言,輸出控制項會設定為將輸出傳送至所有用戶端;不過,可以使用 ControlledOutputControlledOutputVaList暫時變更。 如需輸出控制項值的詳細資訊 ,請參閱DEBUG_OUTCTL_XXX

輸出可由引擎緩衝處理。 如果將多個輸出片段傳遞至引擎,它可能會收集它們,並將其傳送至一個大型片段中的用戶端。 若要排清此緩衝區,請使用 FlushCallbacks

每個用戶端物件都有 輸出寬度,這是用戶端物件的輸出顯示寬度。 雖然此寬度只是用來做為提示,但某些命令和延伸模組函式會根據此寬度來格式化其輸出。 寬度是由 GetOutputWidth 方法傳回,而且可以使用 SetOutputWidth 方法來設定。

輸出回呼

當引擎將輸出傳送至用戶端時,它會使用向用戶端註冊的 IDebugOutputCallbacks 物件。 IDebugOutputCallbacks物件可以使用SetOutputCallbacks向用戶端註冊。 每個用戶端最多可以有一個已向它註冊的 IDebugInputCallbacks 物件。

若要傳送輸出,引擎會呼叫 IDebugOutputCallbacks::Output 方法。

輸出行前置詞

每個用戶端物件都有 一個輸出行前置詞 ,其前面會加上傳送至與用戶端物件相關聯之輸出回呼的每一行輸出。 這可用於縮排,或將識別標記放在每一行輸出上。

輸出行前置詞是由 GetOutputLinePrefix 傳回,而且可以使用 SetOutputLinePrefix 進行設定。 若要暫時變更輸出行前置詞,稍後再次變更它,請使用 PushOutputLinePrefix 和 PopOutputLinePrefix。

記錄檔

偵錯工具引擎支援開啟記錄檔以記錄偵錯會話。 最多一次可以開啟一個記錄檔。 傳送至輸出回呼的輸出也會傳送至此記錄檔 (,除非標示為不會記錄) 。

若要開啟記錄檔,請使用 OpenLogFile2 (或 OpenLogFile) 。 GetLogFile2 (或GetLogFile) 方法會傳回目前開啟的記錄檔。 若要關閉記錄檔,請使用 CloseLogFile

SetLogMask方法可用來篩選傳送至記錄檔的輸出,而GetLogMask會傳回目前的記錄檔篩選。

提示

在互動式偵錯會話中,提示可用來向使用者指出偵錯工具正在等候使用者輸入。 提示會使用 OutputPromptOutputPromptVaList 方法傳送至輸出回呼。 GetPromptText會傳回標準提示的內容。