powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Хочется странного. Перехват вызова произвольного метода
5 сообщений из 5, страница 1 из 1
Хочется странного. Перехват вызова произвольного метода
    #39716498
Тройка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Небольшая предыстория из разряда ненормальное программирование. Достался очень и очень крупный проект на Framework 3.5 для которого тестового окружения нет, скомпилить и запустить его, как обычно в дебаге в VS возможности тоже нет. Потому что даже просто сборка его это нетривиальный процесс. Качественной системы логирования нет. Оно вообще есть, но далеко не всегда и не везде, где надо. Плюс время до перезаписи логов на проде бывает недостаточно для того, чтобы исполнили заявку на получение логов с боевого сервера. При разборе какой-то проблемы добавить в потенциально проблемное место какой-то лог можно, но до выхода патча с этим дополнением могут пройти дни.
В этой ситуации захотелось нечто странное, а именно попытаться каким-то образом перехватывать факт вызова произвольного метода в запущенной программе в условиях, когда изначально для этого ничего особенного не предпринималось. Идея в том, что, например, когда происходит какой-то эксепшен в произвольном месте, то в него же записывается весь стектрейс. Даже если это Release сборка, но есть PDB файл то будет номер строки исходного кода, где произошла ошибка. Т.е. у платформы явно есть информация откуда поток начал идти, куда он пошел дальше, где он находится сейчас, какие у него данные и т.д. Собственно было бы странно если бы этого не было, то как бы иначе вообще все работало.
Вопрос в том, можно ли как-то вклинится в этот механизм что бы получить эти данные самому? Например, быть может есть где-то у какого-нибудь системного объекта типа ApplicationDomain или еще чего-то подобного событие типа CallMethod, которое возникало бы при вызове одного метода из другого. Тогда если подписаться на это события, можно было бы передав каким-либо образом запущенной программе сигнатуру нужного метода начать вылавливать его вызовы для того, чтобы записать значения переданных параметров. Или получить стектрейс что бы понять откуда пришел в него вызов.
Или может быть можно как-то получать стектрейсы всех вызовов приложения: от самого начального метода до конечного и потом фильтровать их по наличию вызова интересующего метода. Что бы понять, как они проходили, какие данные поступили на вход, какие были эксепшены и т.д. и т.п.
Подскажите хотя бы как это правильно называется и в какую сторону копать
...
Рейтинг: 0 / 0
Хочется странного. Перехват вызова произвольного метода
    #39716501
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тройка,

DebugDiag
...
Рейтинг: 0 / 0
Хочется странного. Перехват вызова произвольного метода
    #39716503
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хочется странного. Перехват вызова произвольного метода
    #39716798
Тройка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,
Спасибо, получилось в DebugDiag навешать брейкпоинт на метод и получить стектрейс. Но только в случае, если метод из основной сборки. А вот если создать в решении новый проект Sattelite, добавить на него Reference в основной и потом вызвать его метод то в логе пишет:
Attempting to set managed breakpoint at Sattelite.exe!SateliteClass.ExceptionalMetod
Script Error
Error Code - 0x80004005
Error Source [Unavailable]
Error Description [Unavailable]
Line 170, Column 1

Выражение для указания метода основной программы MainProgram.exe!Form1.Internal и все работает. А как указать что мне нужен брейкпоинт на метод, который расположен в ссылочной сборке Sattelite.exe?
...
Рейтинг: 0 / 0
Хочется странного. Перехват вызова произвольного метода
    #39716815
Тройка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На выражение Sattelite.SateliteClass.ExceptionalMetod тоже в логе идет сообщение что не удалось установить breakpoint, но стектрейс в итоге записывается...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Хочется странного. Перехват вызова произвольного метода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]