Приложение зависает при вызове внешнего конструктора - шаги по устранению неполадок? - PullRequest
0 голосов
/ 09 февраля 2011

Это может быть далеко, но у меня нет идей.

У меня есть решение VS C # с тремя проектами в нем.Есть проект библиотеки классов, а затем два проекта приложения, которые зависят от этой библиотеки классов.Библиотека классов, в свою очередь, зависит от нескольких других DLL, в том числе от avalonedit dll из проекта sharpdevelop.

Одно из приложений прекрасно работает и работает, включая использование моего собственного элемента управления, который обертывает элемент управления avalonedit.Другое приложение не запускается, и, похоже, происходит сбой в тот момент, когда элемент управления avalonedit инициализируется через XAML в моем элементе управления переносом.

Проблема заключается в том, что я не вижу никаких ошибок в отладкеВывод вообще, все, что я вижу, это dll загруженное сообщение, а затем ничего.Если я войду в конструктор моего элемента управления, этот шаг никогда не завершится.Отладчик говорит, что приложение работает, но оно, очевидно, вращается где-то в dll avalonedit, когда базовый элемент управления для редактирования создается стороной XAML.

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

Редактировать: Если я приостановлю / прерву все, он просто вернется к строке, вызывающей мой конструктор управления.

1 Ответ

1 голос
/ 09 февраля 2011

Звучит как тупик. Внимательно изучите все потоки, их трассировки стека и примитивы синхронизации (блокировки, семафоры и т. Д.). Помните: утверждаемые ресурсы могут быть не явными (например, когда вы находитесь внутри статического конструктора, ожидающего чего-то, что пытается получить доступ к статическому полю конструируемого типа, вы получаете тупик).

Есть много способов ввести тупик, но нет простых советов, как справиться с этим. Вы также можете включить прерывание для всех исключений в Visual Studio (Debug -> Exceptions ... и отметьте исключения CLR).

Если это не поможет, вы можете указать здесь трассировку стека, и, возможно, кто-то может обнаружить проблему.

...