使用 /stacktraceonerror 和 /minidumponerror 參數
有兩種方式可以從測試擷取堆疊追蹤和迷你傾印。 最簡單的是「onerror」模式。 當您執行測試時,請提供 '/stacktraceonerror' 和/或 '/minidumponerror' 選項。 然後,如果您遇到失敗,Logger 會擷取預設格式的堆疊追蹤和/或迷你傾印。
擷取堆疊追蹤和迷你傾印的另一種方法是使用下文所述的 API。
使用 WexDebug.h 功能來擷取堆疊追蹤和小型轉儲
WexDebug.h 提供用來擷取呼叫堆疊追蹤和迷你傾印的 API。
呼叫 SaveDump API 以儲存迷你傾印。
此 API 會採用選擇性的 DWORD 參數(這是傾印類型旗標或旗標組合),以及字串參考,其中它會傳回包含檔名和已儲存傾印檔案路徑的字串。 檔名由 API 自動產生,且是以目前的日期和時間為基礎。
可選的傾印類型參數指定所生成的迷你傾印應包含的內容。 它會指定是否將轉儲儲存在 dmp 或 cab 檔案中,而在 cab 檔案的情況下,是否會將符號與轉儲一起儲存。 如果省略選擇性參數,則會使用預設設定。
範例(將檔案傾印連同其 pdb 檔案一起儲存到 CAB 檔案中):
NoThrowString savedDumpFilePath;
HRESULT hr = Debug::SaveDump(MiniDumpFormat::WriteCab | MiniDumpFormat::WriteCabSecondaryFiles, savedDumpFilePath);
請注意,將傾印儲存到 cab 檔案所需的時間比儲存一般傾印還長;附加符號檔需要更長的時間。
呼叫 GetStack API 以取得呼叫堆疊追蹤。
此 API 會採用選擇性的 DWORD 參數(這是類型旗標或旗標組合),以及字串參考,其會傳回包含目前內容之呼叫堆棧追蹤的字串。
選擇性堆疊類型參數會指定堆疊追蹤應包含的內容。 如果省略選擇性參數,則會使用預設設定。
範例:
NoThrowString stackText;
HRESULT hr = Debug::GetStack(CallStackFormat::ColumnNames | CallStackFormat::FrameAddress |
CallStackFormat::SourceLine, stackText);
堆疊選項旗標與調試程式命令的相互關聯。 如果您使用windbg系列調試程式,下列近似相互關聯清單可能會派上用場:
| 調試程式語法 | 對應的旗標 |
|---|---|
| k | CallStackFormat::ColumnNames |
| kv | k + CallStackFormat::FunctionInfo |
| kp / kP | k + CallStackFormat::P arameters |
| kn | k + CallStackFormat::FrameNumbers |
| kf | k + CallStackFormat::FrameMemoryUsage |
技術參考
如果您對傾印和堆疊選擇性參數的詳細資訊感興趣,請參閱 Windows 偵錯工具所提供的檔。 如需有關「傾印旗標」的檔,請參閱 DEBUG_FORMAT_XXX。 如需「堆棧旗標」的檔,請參閱 OutputStackTrace。