Поделиться через


Ведение журнала стека и дампа памяти

Использование переключателей /stacktraceonerror и /minidumponerror

Существует два способа отслеживания трассировки стека и мини-дампов из тестов. Самый простой — режим «onerror». При выполнении тестов укажите переключатели "/stacktraceonerror" и/или "/minidumponerror". Затем, если произойдет сбой, Логгер будет захватывать трассировку стека и/или мини-дамп для вас в формате по умолчанию.

Другой способ отслеживания трассировки стека и мини-дампов — использовать API, описанные ниже.

использование функций WexDebug.h для записи трассировок стека и мини-дампов

WexDebug.h предоставляет API для записи трассировок стека вызовов и мини-дампов.

Вызовите API SaveDump для сохранения мини-дампа.

Этот API принимает необязательный параметр DWORD (который является флагом типа дампа или их сочетанием) и ссылку на строку, в которой возвращается строка, содержащая имя файла и путь к сохраненному файлу дампа. Имя файла автоматически создается API и основано на текущей дате и времени.

Необязательный параметр типа дампа указывает, что должен содержать сделанный мини-дамп. Он также указывает, будет ли дамп сохраняться в dmp-файле или cab-файле, и в случае cab-файлов, будут сохранены символы вместе с дампом. Если необязательный параметр опущен, используются параметры по умолчанию.

Пример (сохранить дамп в файл CAB вместе с его файлами PDB):

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
kv k + CallStackFormat::FunctionInfo
kp / kP k + CallStackFormat::Parameters
Кн k + CallStackFormat::FrameNumbers
кф k + CallStackFormat::FrameMemoryUsage

Технический справочник по

Если вы заинтересованы в получении дополнительной информации о необязательных параметрах дампа и стека, обратитесь к документации, предоставленной с Средствами отладки для Windows. Документацию по флагам дампа см. в разделе DEBUG_FORMAT_XXX. Документацию по флагам стека см. в OutputStackTrace.