Как зарегистрировать или воспроизвести строки или инструкции, выполненные непосредственно перед сбоем

Часто мне приходится отлаживать сбойные программы C++ в Windows, где я могу воспроизвести сбой, но трудно определить, какая последовательность инструкций в коде вызвала сбой (например, другой поток перезаписывает памяти падающего потока). В этом случае не помогает даже стек вызовов. Обычно я прибегаю к уточнению причины краха, комментируя участки исходного кода, но это очень утомительно.

Кто-нибудь знает инструмент для Windows, которые могут сообщать или воспроизводить последние несколько строк исходного кода или инструкции машинного кода, выполненные во всех потоках непосредственно перед сбоем?То есть что-то вроде возможности обратной отладки gdb или что-то вроде BugTrapper от Mutek (который больше не доступен). Я ищу выпущенный и стабильный инструмент (мне известно о «Bug Validator» SoftwareVerify и Hexray IDA Pro 6.3 Trace Replayer, оба из которых все еще находятся в закрытых бета-программах).

Я уже пробовал использовать команды трассировки WinDbg wtи ta @$ra, но обе команды имеют тот недостаток, что они автоматически останавливаются через несколько секунд. Мне нужны команды трассировки, которые выполняются до тех пор, пока не произойдет сбой, и которые отслеживают все потоки работающей программы.

ПРИМЕЧАНИЕ.Я неищу инструмент отладки, предназначенный для решения конкретной проблемы, такой как gflags, pageheap, Memory Validator, Purify и т. д. Я ищу выпущенный и стабильный инструмент для отслеживать или воспроизводить на уровне инструкций.

9
задан 8 June 2012 в 12:44
поделиться