Как я могу напечатать все локальные и глобальные переменные в случае необработанного исключения? - PullRequest
0 голосов
/ 23 мая 2019

Как часть системы ведения журналов для приложения vb.net, которое я разрабатываю, в случае необработанного исключения (вызов MyApplication_UnhandledException в событиях приложения) я хочу вывести имена и значения каждой глобальной переменной в каждом классе, и локальные переменные функции / sub, которые вызвали исключение, в локальный файл .log, который клиенты могут отправить мне для отладки. Я знаю, что это должно быть сделано с помощью размышлений, но я не могу понять, как это сделать. Мне это нужно, потому что Stack Trace (который я также записываю в файл журнала) не хранит ни значений параметров функции, ни значений глобальных переменных.

Это часть, которую я имею для глобальных переменных:

    Dim assbly As Assembly = [Assembly].GetExecutingAssembly()
    Dim types As Type() = assbly.GetTypes()

    For Each t As Type In types
        For Each p As FieldInfo In t.GetFields()
            Logger.addToLog(p.Name & "  - " & p.FieldType.Name) 'should also get value, maybe with p.getValue() ?
        Next
    Next

К сожалению, он печатает только глобальные переменные Public каждого класса, в то время как мне нужны и приватные. Кроме того, это не печатает значения. Для вызова p.getValue () требуется объект в качестве параметра, но я не могу понять, что именно я должен ему дать. Что касается локальных переменных, я еще ничего не смог придумать, и я надеюсь, что кто-то здесь может знать. У меня также возникает ощущение, что должен быть какой-то лучший способ добиться того, чего я хочу. Может кто-нибудь посоветовать, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...