@Student2002

На другом пк софт крашится без исключений, как найти причину?

Здравствуйте , есть софт .
Работает в многопотоке и использует tesseract (возможно это важно)
На моём пк софт не крашится и работает нормально
На пк знакомого софт работает примерно час и вылетает . Причём сообщений об ошибке не появляется (на своём оставлял работать больше 12 часов и всё норм)
Вот что было в логах винды

Приложение: TesseractCombine.exe
Версия платформы: v4.0.30319
Описание. Процесс был завершен из-за необработанного исключения.
Сведения об исключении: System.AccessViolationException
в InteropRuntimeImplementer.TessApiSignaturesInstance.TessApiSignaturesImplementation.BaseApiRecognize(System.Runtime.InteropServices.HandleRef, System.Runtime.InteropServices.HandleRef)
в Tesseract.Page.Recognize()
в Tesseract.Page.GetText()
в TesseractCombine.FormMain.GetText(Byte[])
в TesseractCombine.FormMain.text_Lightshot(System.String, System.String, Int32)
в TesseractCombine.FormMain+d__31.MoveNext()
в System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext(System.Object)
в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
в System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run()

[19:42:23] Chu Feng: в System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
в System.Threading.Tasks.Task.FinishContinuations()
в System.Threading.Tasks.Task.FinishStageThree()
в System.Threading.Tasks.Task.FinishStageTwo()
в System.Threading.Tasks.Task.Finish(Boolean)
в System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)
в System.Threading.Tasks.Task.ExecuteEntry(Boolean)
в System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
в System.Threading.ThreadPoolWorkQueue.Dispatch()
в System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Как можно поймать момент где происходит краш на пк знакомого или хотябы вызвать его у меня чтоб студия подсветила кусок когда где происходит крах ?
Возможно важно: у знакомого пк сильно мощнее моего и там софт работает намного быстрее .
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 3
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Проверьте - установлены ли на целевом ПК VC_redist.x64.exe и VC_redist.x86.exe
Ответ написан
2ord
@2ord
В справке об исключении System.AccessViolationException написано
An access violation occurs in unmanaged or unsafe code when the code attempts to read or write to memory that has not been allocated, or to which it does not have access. This usually occurs because a pointer has a bad value.
что может указывать на проблему в обвязке к Tesseract. Скорее всего, она не расчитана на многопоточное использование.
Я бы добавил логи вокруг вызовов Tesseract и не только там.
Ответ написан
Комментировать
@Ne4to
нужно настроить сборку дампа памяти при падении
можно сделать руками через реестр - https://docs.microsoft.com/en-us/windows/win32/wer...
или через procdump64 из пакета sysinternals
procdump64 -ma -i C:\dbg\CrashDumps
полученный дамп можно открыть в студии или через WinDbg
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы