Как часть системы ведения журналов для приложения 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 () требуется объект в качестве параметра, но я не могу понять, что именно я должен ему дать.
Что касается локальных переменных, я еще ничего не смог придумать, и я надеюсь, что кто-то здесь может знать. У меня также возникает ощущение, что должен быть какой-то лучший способ добиться того, чего я хочу. Может кто-нибудь посоветовать, пожалуйста?