문제

VB6로 작성된 오래된 응용 프로그램을 유지합니다. 클라이언트의 환경에서 디버거 아래에서 재현 할 수없는 런타임 오류가 발생합니다. 스택 트레이스 또는 오류 위치를 얻는 방법이 있습니까?

내 말은, 코드 전체에 추적 진술을하지 않고 여기 또는 다음과 같은 모든 절차에 로깅을위한 오류 처리기 추가 여기.

간단한 질문 인 것 같습니다. 죄송합니다. 나는 단지 VB6을 잘 모른다. 또한 정보가 얼마나 널리 사용되는지 (또는 예전) 정보를 고려하여 모든 정보를 구글을 벗기는 것은 놀랍게도 어렵습니다.

도움이 되었습니까?

해결책

PCODE로 컴파일하고 오류가 여전히 발생하는지 확인하십시오. 이것은 VB6의 디버그 모드와 런타임의 공통 차이점 중 하나입니다. 나는 기본으로 컴파일을했고 런타임에서만 발생한 오류가 발생했습니다. PCODE로 전환했을 때 오류가 사라지거나 실제 문제가 자른 새로운 오류가 발생했을 가능성이 높아지고 디버그 모드에서 더 쉽게 재현되었습니다.

여전히 오류가 발생한다면 프로 시저 스택의 상단에서 시작하여 Maero의 제안을 사용하여 작업하는 것이 좋습니다.

On Error Goto Handler
<code>
Exit <routine>
Handler:
Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description

그것은 고통이지만 그 주위에는 실제 방법이 없습니다.

다른 팁

VB6 디버거는 때때로 벗겨집니다. 대안이 있습니다.

  • 당신은 시도 할 수 있습니다 Windbg, Microsoft의 무료 독립형 디버거. 최적화없이 VB6을 컴파일하고 "상징적 디버그 정보 만들기"(예 : PDB 파일 생성)를 디버그 할 수 있습니다. 여기에 있습니다 2006 블로그 게시물 VB6과 함께 Windbg를 사용하는 것에 대한 Microsoft 남자에 의해 2004 블로그 게시물 Windbg에 대한 간단한 소개를 가진 다른 Microsoft Guy.
  • VB6 및 PDB 파일과 함께 Visual Studio 2008 디버거를 사용할 수도 있습니다. Visual C ++ Express Edition (무료). 보다 이것 자세한 사항은.
  • Windbg와 Visual Studio 예상하다 소스 코드는 VB6을 구축했을 때 빌드 머신에서와 마찬가지로 디버그 머신에서 정확히 동일한 경로에 있어야합니다. 가장 쉬운 방법은 같은 기계를 빌드하고 디버깅하는 것입니다. 그렇지 않으면 필요할 수 있습니다 깡깡이 ~와 함께 물질 가상 드라이브를 만들려면 - 심각한 방법은 기호 서버.

프로젝트 속성/컴파일 탭에서 "Symbolic Debug Info"확인란을 확인하면 기본 C ++ 응용 프로그램처럼 Visual Studio에서 디버그 할 수 있습니다.

오랜 시간이 지났지 만 오류 핸들러를 추가하고 적절한 메시지를 출력하지 않고 VB6 응용 프로그램에서 스택 추적을 얻는 방법이 없다고 생각합니다. 전체 애플리케이션에 오류 처리를 추가하는 타사 도구가 있었지만 코드 전체에 "On Error Goto"오류 처리기가 추가되었다고 생각합니다.

옆으로 VB6 앱에서 겪은 가장 교활한 런타임 오류 중 하나는 컨트롤 속성에 클라이언트의 PC에 존재하지 않는 글꼴을 사용했을 때였습니다. 이로 인해 코드에 갇힐 수없는 런타임 오류가 발생하므로 오류를 발견 한 적이없는 오류 처리량이 없습니다. 나는 마침내 우연히 그것을 만났다. 도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top