Ведение журнала стека и дампа
Использование параметров /stacktraceonerror и /minidumponerror
Существует два способа записи трассировки стека и мини-дампов из тестов. Самый простой — режим onerror. При выполнении тестов укажите параметры te "/stacktraceonerror" и /или "/minidumponerror". Затем, если произойдет сбой, средство ведения журнала зафиксует трассировку стека и (или) мини-дамп в формате по умолчанию.
Другим способом записи трассировки стека и мини-дампов является использование ИНТЕРФЕЙСов API, описанных ниже.
Использование функции WexDebug.h для записи трассировок стека и мини-дампов
WexDebug.h предоставляет API для записи трассировок стека вызовов и мини-дампов.
Вызовите API SaveDump для сохранения мини-дампа.
Этот API принимает необязательный параметр DWORD (который является флагом типа дампа или сочетанием флагов) и ссылку на строку, в которой возвращает строку, содержащую имя файла и путь к сохраненного файла дампа. Имя файла автоматически создается API и основано на текущих датах и времени.
Необязательный параметр типа дампа указывает, что должен содержаться в взятом мини-дампе. Он также указывает, будет ли сохраняться дамп в DMP- или CAB-файле, а в случае cab-файлов — сохраняться ли символы вместе с дампом. Если необязательный параметр опущен, используются параметры по умолчанию.
Пример (сохранение дампа в cab вместе с его pdbs):
NoThrowString savedDumpFilePath;
HRESULT hr = Debug::SaveDump(MiniDumpFormat::WriteCab | MiniDumpFormat::WriteCabSecondaryFiles, savedDumpFilePath);
Обратите внимание, что сохранение дампа в CAB-файл занимает больше времени, чем сохранение обычного дампа; Вложение файлов символов занимает еще больше времени.
Вызовите API GetStack, чтобы получить трассировку стека вызовов.
Этот API принимает необязательный параметр DWORD (который является флагом типа или сочетанием флагов) и ссылку на строку, в которой он возвращает строку, содержащую трассировку стека вызовов для текущего контекста.
Необязательный параметр типа стека указывает, что должна содержать трассировка стека. Если необязательный параметр опущен, используются параметры по умолчанию.
Пример
NoThrowString stackText;
HRESULT hr = Debug::GetStack(CallStackFormat::ColumnNames | CallStackFormat::FrameAddress |
CallStackFormat::SourceLine, stackText);
Корреляция флагов параметров стека с командами отладчика. При использовании семейства отладчиков windbg может пригодиться следующий примерный список корреляций:
Синтаксис отладчика | Соответствующие флаги |
---|---|
k | CallStackFormat::ColumnNames |
Кв | k + CallStackFormat::FunctionInfo |
kp / kP | k + CallStackFormat::P arameters |
kn | k + CallStackFormat::FrameNumbers |
Kf | k + CallStackFormat::FrameMemoryUsage |
Технический справочник
Дополнительные сведения о необязательных параметрах дампа и стека см. в документации по средствам отладки для Windows. Документацию по флагам дампа см. в DEBUG_FORMAT_XXX. Документацию по флагам стека см. в разделе OutputStackTrace.