Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Креш .Нет проги без Exception

313  
AlexNek патриот27.08.18 19:23
AlexNek
27.08.18 19:23 

Это когда просто вываливается, плюя на все ухищрения.

Причем конечно, по набору неизвестных условий, случайным образом, на компе заказчика. "Переключить" на свой комп. или произвести "имитацию" рабочей обстановки на своём компе практически нереально.

Кто то уже сталкивался с подобным?


#1 
  ilghiz знакомое лицо27.08.18 20:19
NEW 27.08.18 20:19 
в ответ AlexNek 27.08.18 19:23

хоть в какой системе и оболочке это происходит? Я наблюдал например:

1. на плиске, кристалл у заказчика слегка перегрелся от того, что он в жаркий день гулял и тайминги слетели,

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

3. под виндой, не помню почему, но часто со стороны наблюдал такое...

#2 
AlexNek патриот27.08.18 21:30
AlexNek
NEW 27.08.18 21:30 
в ответ ilghiz 27.08.18 20:19
хоть в какой системе

Для .Net - винда.

Обычно всегда Exception ловился. А тут нифига, Лог обрывается и усё.


Вот нашел пока ссылки, надо попробовать

https://www.microsoft.com/en-us/download/details.aspx?id=2...

http://blog.functionalfun.net/2013/05/how-to-debug-silent-...


#3 
Murr патриот27.08.18 21:59
Murr
NEW 27.08.18 21:59 
в ответ AlexNek 27.08.18 19:23

Кто то уже сталкивался с подобным?

----

Да.

Если нет вообще ничего - т.е. вываливается ДО первой показанной формы, то:

- отсутствие дллки в нужном формате наиболее вероятно.

- отсутствие каких-либо предустановленных тоолсов.

- несовместимость по процессору интел/амд.

- какие-нибудь хитрые аллокации в начале запуска.

- дллки грузятся не туда.

- в начале кода програмки есть пара вызовов на инициализацию - там что-то системозависимое.г


Разок было смешно. Первую форму - показывает, дальше - валится.

Как выяснилось - попала дебужная версия либ - там переменные в либах должны были инициализироваться определенным образом, а не инициализировались и релевантная струтрура на диске не создавалась и не проверялась. В результате фаулт не качился.


#4 
AlexNek патриот27.08.18 22:22
AlexNek
NEW 27.08.18 22:22 
в ответ Murr 27.08.18 21:59

не... всё грузится и работает. Тут еще и проблема, что прога обычно не закрывается, работать должна 24 hours x 7 days

И только при наличии определенных условий случается крах, пока и был то всего два раза.

#5 
Murr патриот27.08.18 22:58
Murr
NEW 27.08.18 22:58 
в ответ AlexNek 27.08.18 22:22

Общий трай-катч у тебя там есть? Проскакивает мимо него ?


Есть виндовый дамп по факту смерти проги?


Если первое, то, помнится, некоторые из эксептионов не базируются на Систем.Эхцептион.

Их было не много. И были они в до .Нетовские времена. Но, по моему, так и остались т.к. завязано на ошибки в сопроцессорной математике.

Где и как ловятся и обрабатываются - не смотрел, не требовалось.


Ну а дамп у тебя по второй ссылке описан. Включать и сидеть и ждать.


#6 
AlexNek патриот27.08.18 23:12
AlexNek
NEW 27.08.18 23:12 
в ответ Murr 27.08.18 22:58
Общий трай-катч у тебя там есть?

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += UnhandledExceptionHandler;
currentDomain.FirstChanceException += CurrentDomain_FirstChanceException;
DispatcherUnhandledException += MainApp_DispatcherUnhandledException;


FirstChanceException - это пожалуй будет лишним, поставил чисто для пробы


#7 
Wanderer_ завсегдатай27.08.18 23:14
NEW 27.08.18 23:14 
в ответ AlexNek 27.08.18 19:23

Посмотрите в Computerverwaltung -> Windows Protokolle, может там задокументировано, почему программа отвалилась.

Попробуйте покрыть try- блоками критические места.

У вас unsafe code в программе есть? Или какие-нибудь свои нативные Dll в программе используете?

#8 
Программист коренной житель28.08.18 08:09
NEW 28.08.18 08:09 
в ответ AlexNek 27.08.18 19:23, Последний раз изменено 28.08.18 08:14 (Программист)

Скорее всего это исключение проброшенное из unmanaged кода. Какой-нибудь boostexception или просто throw "you can't be here"; / throw 42; :)


Ну и в самом .Net есть пара исключений, которые не ловятся catch'ем, например StackOverflowException (https://stackoverflow.com/questions/7392783/list-of-except...).

#9 
AlexNek патриот28.08.18 19:31
AlexNek
NEW 28.08.18 19:31 
в ответ Wanderer_ 27.08.18 23:14
Попробуйте покрыть try- блоками критические места.

Для данного случая абсолютно бессмысленная затея. Exception ловится и глобально без проблем


Код - нативный С шарп. Что происходит - бум ждать.


Кому надо смотрим это

https://blogs.msdn.microsoft.com/chaun/2013/11/12/steps-to...

#10 
Murr патриот28.08.18 19:38
Murr
NEW 28.08.18 19:38 
в ответ AlexNek 28.08.18 19:31

Насчет DebugDiag - не знаю.

А WER-репорт у меня получить не получилось. В техподдержке сказали что с какой-то версии не подерживается.

#11 
AlexNek патриот28.08.18 22:04
AlexNek
NEW 28.08.18 22:04 
в ответ Murr 28.08.18 19:38
А WER-репорт у меня получить не получилось.

WER-репорт работает не на всех машинах. На моей так пока не получилось, у клиента нет проблем, хотя 10-ка и там и там.

DebugDiag работает везде, но требует прав админа.

Зато при загрузке дампа на машину с проектом открылся исходник с точным местом вылета. Правда вылет был "Exception"


#12 
Murr патриот29.08.18 09:56
Murr
NEW 29.08.18 09:56 
в ответ AlexNek 28.08.18 22:04

у клиента нет проблем, хотя 10-ка и там и там

-----

По тому что мне сказали у мелкомягких - перестали ставить с или после ХП.

Так что если у него это работает - поставилось с чем-то в комплекте.

#13 
AlexNek патриот29.08.18 19:15
AlexNek
NEW 29.08.18 19:15 
в ответ Murr 29.08.18 09:56

тебя тупо обманули

https://docs.microsoft.com/en-us/windows/desktop/wer/what-...

https://www.microsoftpressstore.com/articles/article.aspx?...


Кстати, забыл еще про EventViewer, там нужно просто поискать имя своего ехе.

Оказалось обычное OutOfMemory, никакой дамр не поможет. Правда обычное наблюдение ничего не дало, память крутится около 200К

#14 
Murr патриот29.08.18 19:23
Murr
NEW 29.08.18 19:23 
в ответ AlexNek 29.08.18 19:15, Последний раз изменено 29.08.18 19:28 (Murr)

Я честным образом пытался выполнить рекомендации которые мелкомягкие приводят по ссылке в Студии. Там имено WEP-отчет.

Не получилось.

Тогда начал пинать мелкомягких. От них получил то что получил.


обычное OutOfMemory

------

"Вот что значит не проверять результат вызова malloc/callloc на null"

#15 
Программист коренной житель30.08.18 07:21
NEW 30.08.18 07:21 
в ответ AlexNek 29.08.18 19:15

Если у меня случается какой-то непонятный крэш в .НЕТе, то первое средство - Fusion и только потом EventVeiwer :)

#16 
AlexNek патриот30.08.18 21:44
AlexNek
NEW 30.08.18 21:44 
в ответ Программист 30.08.18 07:21
Если у меня случается какой-то непонятный крэш в .НЕТе, то первое средство - Fusion


Это или что другое?

https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-1.1/e74a18c4(v=vs.71)


The Assembly Binding Log Viewer displays details for failed assembly binds. This information helps you diagnose why the .NET Framework cannot locate an assembly at run time.

Это стандартная утилита для Винды? А то есть проблемка - на компах нет "админа", да и установить что сторонее не просто.

#17 
Программист коренной житель31.08.18 08:15
NEW 31.08.18 08:15 
в ответ AlexNek 30.08.18 21:44
Это или что другое?

Оно.


Это стандартная утилита для Винды?

Да. Включается через реестр.


А то есть проблемка - на компах нет "админа", да и установить что сторонее не просто.

Понадобятся админские права для реестра, устанавливать ничего не надо, надо только включить (https://stackoverflow.com/questions/255669/how-to-enable-a...).

#18 
AlexNek патриот31.08.18 17:37
AlexNek
NEW 31.08.18 17:37 
в ответ Программист 31.08.18 08:15

Чет не догоняю

How do I enable assembly bind failure logging (Fusion) in .NET?
не надо такое пока.

#19