2015-09-29 8 views
1

У меня есть приложение WPF C#, ориентированное на версию 4.5 .Net framework. Мое приложение вызывает неконтролируемую DLL, все, кроме одного, работают нормально. Когда я вызываю метод проблемы, мой процесс выходит без каких-либо исключений, код выхода: 1073741855 (0x4000001f)Вызов неуправляемого процесса уничтожения dll без повышения исключения

Я читал об элементе <legacyCorruptedStateExceptionsPolicy> и добавил его в свой файл app.config. Я включил ВСЕ исключения в диалоговом окне «Исключение настроек» (я использую VS2015, BTW). На этом этапе у меня закончились методы, чтобы определить, что вызывает процесс выхода.

Обновление: Я случайно попробуйте включить Enable родной отладки кода в настройках проекта и теперь появляется следующее исключение:

Exception брошенным в 0x77CBED0B (ntdll.dll) в SK.UnmanagedDLLExceptionTest.exe: 0xC0000374: Куча была повреждена (параметры: 0x77CF4270).

Учитывая приведенную выше информацию, знаете ли вы какие-либо другие методы, которые могут быть использованы для придания дополнительной информации поверхности?

Если вы заинтересованы (и желаете), я создал мертвое простое консольное приложение, которое обнаруживает проблему, download here.

ответ

1

Включив «Включить родную отладку коды» в настройках проекта я был в состоянии иметь следующее исключение выброшено:

Exception брошенного в 0x77CBED0B (ntdll.dll) в SK.UnmanagedDLLExceptionTest.exe : 0xC0000374: куча была испорченных (параметров: 0x77CF4270)

и хотя это, конечно, не очень хорошая новость, он предоставляет более подробную информацию и направить меня в направлении DLL плохого поведения.

1

Условный флаг catch не помогает, если вы на самом деле ничего не поймаете.

Ошибка, которую декодирует в DLL, не найдена.

Это 32-разрядная DLL, и вы скомпилированы как любой процессор. Если у вас x64 (и, вероятно, вы это делаете), это проблема. Компилировать именно как x86.

Если вы помещаете улов в него, это все равно не поможет, поскольку привязки скомпилированы при вводе метода (до достижения попытки).

+0

Звучит многообещающе. Я внес изменения, которые вы предложили, но я испытываю те же самые результаты. На странице настроек проекта я заметил параметр «Включить отладку собственного кода» и попробовал это, это привело к следующему исключению: Исключение, брошенное в 0x77CBED0B (ntdll.dll) в SK.UnmanagedDLLExceptionTest.exe: 0xC0000374: куча была поврежден (параметры: 0x77CF4270). –

+0

Тогда у тебя серьезные проблемы. DLL испортила кучу процесса или что-то в этом роде. – Joshua

+0

Я вхожу. :) Оказывается, прорыв для меня состоял в том, чтобы включить параметр «Включить собственный код отладки». Спасибо за вашу помощь, я ценю это –