2015-07-24 2 views
2

Я знаю, что я могу открыть DLL-файл с помощью браузера сборки, такого как ILSpy, чтобы увидеть классы и методы, которые он содержит. Но если процесс в настоящее время использует DLL, можно ли узнать, какой метод он использует в настоящее время? И любые другие детали, такие как точная строка, на которой он включен, и если она выбрала исключение?Посмотрите, какой метод используется в настоящее время в DLL

Этот вопрос не зависит от языка, но меня больше всего интересует это в C#. И библиотеки DLL компилируются в .NET framework.

Моя цель - создать регистратор, который показывает, какую часть моего кода использует процесс, и если он выдал исключение, из которого он пришел.

+0

Вы должны уметь видеть, какие методы JIT (не обязательно используются) с некоторыми командами WinDbg ...Уточнение вашей фактической цели может помочь кому-то дать хороший ответ - до сих пор кажется, что вы хотите создать своего рода профилировщик ... –

+0

См. Edit please – Darius

+1

Посмотрите честную цель для меня. Я не верю, что это возможно, как вы хотите, но вопрос сам по себе хорош, и кто-то может знать ответ. –

ответ

1

Ближайший я знаю, как добраться до этого, чтобы проверить стоп-код процесса. Это легко сделать это с помощью ProcessExplorer (получить его здесь: https://technet.microsoft.com/en-gb/sysinternals/bb896653.aspx)

Тогда:

  1. Open Process Explorer, выберите процесс, необходимый вам больше информации о , затем щелкните правой кнопкой мыши> Свойства .. .
  2. Выберите 'Темы' tab. Это откроет список всех потоков для этого процесса.
  3. Выберите нить вас интересует, то нажмите на кнопку «Stack» Это покажет список загруженных библиотек DLL и метод, называемый

Вы должны получить что-то вроде этого:

enter image description here

Обратите внимание, что вышеуказанное будет работать, если PE может разрешать символы. Эта страница представляет собой пример того, как включить разрешение символа в Process Explorer: http://windowsexplored.com/2012/01/31/resolve-symbols-in-process-explorer-monitor-without-installing-the-debugging-tools/

+0

Как это помогает ему с обработкой исключений? – Gilad

3

1.А простой подход будет добавить в основную функцию

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 


() и обработчик будет что-то вроде

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    string errorMessage = e.ExceptionObject.ToString(); 
    Logger.Error(e.ExceptionObject.ToString()); 
    Current.Shutdown(1); 
} 

2. Вы можете использовать ProcDump с флагом «-e», чтобы поймать необработанные исключения.

, например MYAPP.EXE:

Procdump -ma -e -w myApp.exe C:\temp\fe.dmp 

, а затем вам нужно будет загрузить некоторые вещи для winDB
1. Загрузите файл дампа в WinDBG
2. .loadby sos clr в Windbg
3. !printexception

0:005> !printexception 
Exception object: 0000000002becc68 
Exception type: System.NullReferenceException 
Message:   Object reference not set to an instance of an object. 
InnerException: <none> 
StackTrace (generated):  
SP    IP    Function  
000000001B94F190 000007FF7E551B74 myApp!myApp.MainForm+...  
000000001B94F220 000007F8010FFD85 mscorlib_ni!System.Threading...  
000000001B94F380 000007F8010FFAE9 mscorlib_ni!System.Threading...  
000000001B94F3B0 000007F8010AC31F mscorlib_ni!System.Threading...  
000000001B94F400 000007F8010AC92A mscorlib_ni!System.Threading... ... 


может потребоваться расширение SOSEX а также