Информация об изменениях

Сообщение Re[3]: На сколько затратно выбрасывание исключения от 01.03.2015 4:28

Изменено 01.03.2015 5:18 Pavel Dvorkin

Здравствуйте, drol, Вы писали:

D>И причём здесь SEH, когда речь идёт об обычных исключениях внутри .NET ?


"Обычные" исключения выбрасываются с помощью вызова Win API RaiseException.

Вот здесь рассмотрение того, что происходит в дотнете при throw из C#. Первый и второй CallStack дают исчерпывающую информацию. throw из дотнета приводит в конечном счете к вызову нативной RaiseException из KERNELBASE.dll, а она приводит к переключению в режим ядра и далее, как в моем первом сообщении в этом топике.

http://geekswithblogs.net/akraus1/archive/2010/05/25/140064.aspx
Re[3]: На сколько затратно выбрасывание исключения
Здравствуйте, drol, Вы писали:

D>И причём здесь SEH, когда речь идёт об обычных исключениях внутри .NET ?


"Обычные" исключения выбрасываются с помощью вызова Win API RaiseException.

Вот здесь рассмотрение того, что происходит в дотнете при throw из C#. Первый и второй CallStack дают исчерпывающую информацию. throw из дотнета приводит в конечном счете к вызову нативной RaiseException из KERNELBASE.dll, а она приводит к переключению в режим ядра и далее, как в моем первом сообщении в этом топике.

0028ed38 767db727 KERNELBASE!RaiseException+0x58, calling ntdll!RtlRaiseException
0028ed4c 68b9008c mscorwks!Binder::RawGetClass+0x20, calling mscorwks!Module::LookupTypeDef
0028ed5c 68b904ff mscorwks!Binder::IsClass+0x23, calling mscorwks!Binder::RawGetClass
0028ed68 68bfb96f mscorwks!Binder::IsException+0x14, calling mscorwks!Binder::IsClass
0028ed78 68bfb996 mscorwks!IsExceptionOfType+0x23, calling mscorwks!Binder::IsException
0028ed80 68bfbb1c mscorwks!RaiseTheExceptionInternalOnly+0x2a8, calling KERNEL32!RaiseExceptionStub
0028eda8 68ba0713 mscorwks!Module::ResolveStringRef+0xe0, calling mscorwks!BaseDomain::GetStringObjRefPtrFromUnicodeString
0028edc8 68b91e8d mscorwks!SetObjectReferenceUnchecked+0x19
0028ede0 68c8e910 mscorwks!JIT_Throw+0xfc, calling mscorwks!RaiseTheExceptionInternalOnly
0028ee44 68c8e734 mscorwks!JIT_StrCns+0x22, calling mscorwks!LazyMachStateCaptureState
0028ee54 68c8e865 mscorwks!JIT_Throw+0x1e, calling mscorwks!LazyMachStateCaptureState
0028eea4 02ffaecd (MethodDesc 0x7af08c +0x7d WindowsFormsApplication1.Form1.F1(System.Object, System.EventArgs)), calling mscorwks!JIT_Throw
0028eeec 02ffaf19 (MethodDesc 0x7af098 +0x29 WindowsFormsApplication1.Form1.F2()), calling 06370634
0028ef58 02ffae37 (MethodDesc 0x7a7bb0 +0x4f System.Windows.Forms.Control.OnClick(System.EventArgs))


http://geekswithblogs.net/akraus1/archive/2010/05/25/140064.aspx