[ДОБАВЛЕНИЕ: ВОПРОС НЕ НУЖЕН БЫТЬ ОТВЕТСТВЕННЫЙ В ОТНОШЕНИИ НЕПРАВИЛЬНОГО ПОЛОЖЕНИЯ НА МОЕЙ ЧАСТИ;ПОСМОТРИТЕ МОЙ ОТВЕТ И НИЖЕ ИЗВЛЕЧЕНИЯ]
Мой клиент передал мне файл трассировки, отправленный клиентом, который включает (релевантно) только информацию о регистре ЦП, содержащуюся в структуре _CONTEXT во время возникновения исключения.
Я несколько месяцев совершенствовал, компилировал и собирал код (написанный на C ++ с некоторыми вызовами JNI для JVM) для программы, и новая версия, которую я создал, была выпущена для клиентов:файл трассировки с сообщением об ошибке.Этот файл трассировки был создан программой и просто соответствует выбрасыванию данных регистра (содержащихся в структуре _CONTEXT), которые были получены путем установки пользовательского обработчика исключений для программы (через SetUnhandledExceptionFilter ()).
Мой клиент сообщаетмне, что за прошедшие годы предыдущие разработчики сочли эти файлы трассировки полезными и помогли отследить ошибки, не более чем информацию в файлах трассировки.
Поэтому я работаю в предположении, что он был вНа самом деле выходные данные регистра ЦП из структуры _CONTEXT, которые предыдущие разработчики сочли полезными в файлах трассировки, и я пытаюсь найти способ интерпретации этой информации, чтобы помочь отследить, что происходило во время сбоя.(то есть, какую функцию вызывали и каковы ее аргументы и т. д.)
Возможно, невозможно использовать данные регистра ЦП без какой-либо другой информации, и в этом случае мой клиент может ввести меня в заблуждениеДело в том, что предыдущие разработчики имели в своем распоряжении файлы трассировки, которые содержали информацию в дополнение к информации о регистре ЦП.
Итак, я хотел бы знать одну вещь : выполнимо ли это вообще, используя ONLY информацию о регистре ЦП, имеющуюся в структуре данных _CONTEXT, наряду со всем доступным исходным кодом в успешной среде сборки Debug & Release для получения полезной информации?
Предполагая, что ответ «да», я хотел бы знать следующее: : как можно получить полезную информацию из информации о регистре ЦП, содержащейся в структуре _CONTEXT, при условии, что исходный код доступен, и чтоэтот исходный код успешно работает на Dмашина разработки как в режиме отладки, так и в режиме выпуска (но не в среде конечного пользователя и без каких-либо файлов или данных конечного пользователя, кроме одного отмеченного файла трассировки)?Я полагаю, что цель состоит в том, чтобы найти функцию, которая была вызвана во время исключения, на основе ее адреса, и, надеюсь, эта функция будет той, которая находится в существующей базе кода (и не вложена глубоко в библиотеки DLL Windows),Кроме того, мой клиент указал, что предыдущие разработчики даже могли получить аргументы для функции виновника, которая вызвала исключение (хотя, опять же, он мог вводить меня в заблуждение).
Обратите внимание, что, конечно, конечный пользователь используетРелиз-режим сборки программы.Я также предположил бы, что информация _CONTEXT, выводимая в файл трассировки, будет соответствовать процессору, используемому конечным пользователем.
Короче говоря, я спрашиваю, как интерпретировать различные поля структуры _CONTEXT, которые представляют регистры ЦП в Windows, полезным способом для отладки исключения. Что соответствуют регистрам и на какие мне смотреть? Вот ссылка на страницу, которая включает определение структуры _CONTEXT для некоторых (не всех) процессоров, в качестве примера возможных структур _CONTEXT: http://msdn.microsoft.com/en-us/library/ms679284%28VS.85%29.aspx. Я не уверен, какой процессор использует конечный пользователь, но эта информация будет легко доступна по мере необходимости, если я уверен, что смогу получить некоторую полезную информацию из структуры _CONTEXT. Обратите внимание, что файл трассировки, который я имею, показывает 128 (4-байтовых) записей - что, кажется, не соответствует размеру любых структур _CONTEXT, которые я видел (я также посмотрел в WINNT.H, Фактический файл, который определяет структуру _CONTEXT, и на первый взгляд не видел никаких возможных определений, которые содержали бы 128x4 байта, но это был только быстрый взгляд, и я могу ошибаться).
Я охотился за ответами или подсказками, но пока не нашел полезных.
Спасибо,
Dan.