wpf 튕김 문제 (with 덤프파일

  • 어떤 프로그램인가?
    wpf로 프로그램을 만들었습니다.
    데이터를 측정하여 차트로 표시하는 프로그램입니다.
    반복적 측정이다보니 데이터는 0.1초마다 측정, 1cycle의 시간이 길면 40분정도 됩니다. (데이터 개수(MeasurementData) : 10 * 60 * 40 = 24,000)
    데이터는 ObservableCollection 에 받은 뒤 차트와 바인딩 시켰습니다.
    (MeasurementData 클래스는 double값 3개, string 값 3개 (각각 문자 25글자) , int 5개로 구성됨)
    차트는 syncfusion sfchart를 사용하였습니다.

  • 현재 작성한 코드 중 문제가 되는 부분
    문제는 잘 작동하다가 한번씩 꺼지는 문제가 발생합니다.
    이벤트 로그를 보면 몇가지 유형이 나옵니다.

  1. ntdll.dll 예외로 인한 appcrash (이벤트 로그)
  2. corelib.dll 예외로 인한 appcrash (이벤트 로그)
  3. presentationCore.dll 예외 (VS 2022 디버그 중 발생)
  4. 메모리 0xc0000005 에러로 인한 appcrash (이벤트 로그)

에러가 발생하는 시점에 메모리 덤프를 저장하였으나
분석할 줄 몰라 못보고 있습니다.

  1. 메모리 덤프 파일 (dmp 파일)
    Test_Test.exe.12928.zip - Google Drive

  2. vs2022에서 발생했던 에러 메시지

  • 기대하는 동작
    에러 해결

에러 관련 감이 안잡혀 중구난방이네요.
혹시나 더 필요한 사항이 있으시면 알려드릴께요…
감사합니다

올려주신 메모리 덤프는 예외 발생 상황에 저장된 것이 아닌 것 같습니다.
멀티 스레드 이슈로 추측되는데 해당 오류가 발생하는 시점(2의 상황)에 [호출스택]과 [스레드] 창도 함께 캡쳐해서 올려주세요.

2 Likes

우선, 해당 덤프는 예외 발생 상황에 저장된 것이 맞습니다. 단지, 일반적인 닷넷 코드에서 예외가 발생한 것이 아니고, native 수준에서 발생한 것입니다. 그리고 하필 그것이 WPF Redner Thread에서 발생한 것이라서,

.NET Framework: 2021. WPF - UI Thread와 Render Thread (sysnet.pe.kr)

별다르게 문제 해결에 도움이 안 됩니다. 전형적인 AV(Access Violation) 오류인데, 실제로 추적해 보면 포인터가 정상적인 메모리를 가리키는 위치가 아니라서 어쨌든 AV 예외가 발생하는 것이 맞습니다.

이런 경우, 제 경험으로는 2가지로 나뉩니다.

  1. 내부에서 사용한 다른 native 코드 자체, 또는 그것을 사용하는 측에 버그가 있는 경우입니다. 그게 다른 네이티브 코드에 간섭을 일으켜 저런 AV가 발생하는 것인데요, 이런 경우 내부에서 사용한 네이티브 코드를 가짜 더미 코드로 대체해 테스트하는 식으로 검증해야 합니다.

  2. 실제로 WPF Render Thread 자체에 버그가 있는 경우입니다. 가능성은 그리 크지 않습니다. 왜냐하면, WPF 자체가 많은 엔진의 기반이므로 그런 식의 오류가 있었다면 이미 수많은 앱들이 겪을 수 있기 때문입니다. 단지, 마이크로소프트 역시 일반 개발자들의 실수를 할 수 있으므로 고려해 볼 수는 있는데요, 애석하게도 이슈를 열어 설득(?)시켜 패치를 내놓게 만들어야 하기 때문에 프로젝트 일정상 별로 좋은 상황이 아닙니다.

일단, 네이티브 사용 코드 및 그것이 하는 역할을 가짜 managed 코드로 대체해 보시고, 그래도 오류가 발생하면 재현이 “반드시” 되는 “최소한의 간단한” 코드를 마이크로소프트 측에 이슈를 제기해 보세요.

5 Likes

답변 감사합니다.

알려주신 내용으로 테스트중인데 아직 문제점을 찾지 못했습니다.
코드도, 윈도우 환경도 업데이트 및 변경한 사항은 없지만 최근 일주일간은 에러없이 잘 돌아가고있습니다.
일단 스레드 관련 이슈에 대해 더 알아보면서 이슈가 발생하면 다시 글을 올려야 할 것 같네요. (호출스텍, 스레드 창 등)

답변 감사합니다.