2010-02-23 4 views
4

내 .NET 응용 프로그램을 닫으면 DBEXPSDA40.DLL (Dev Art MS SQL Server dbexpress 드라이버)에서 액세스 위반이 발생합니다. 내 응용 프로그램 (VB.NET)은 dbExpress를 사용하여 SQL Server에 연결하는 COM 서버를 작성합니다.Visual Studio에서 디버깅 여부에 관계없이 .NET 프로그램이 어떻게 다르게 동작합니까?

동일한 작업을 수행하지만 내 호스트 응용 프로그램이 기본 Delphi 응용 프로그램 또는 Excel VBA이면 A/V가 표시되지 않습니다. 또한 디버깅을 사용하여 VS IDE에서 VB.NET 응용 프로그램을 실행해도 표시되지 않습니다.

나는

(이 경우 두 SQL 서버에 대한 하나의 SQL Server Compact에 대한 다른에) 드라이버를 폐쇄의 돌봐의 dbExpress 단위의 종결 절,에 A/V를 추적했다

.NET 환경에서 디버깅과 디버깅의 차이점을 파악할 수 있다면 더 자세히 살펴 봐야 할 것입니다.

+0

AV 숨길 수 있지만 그것이 존재하지 것을 의미하지 않는다. 어떻게 확인하나요? , – Torbins

+0

은 내가 마무리를 통해 (델파이) 추적 할 수 있으며, 작동 할 때 드라이버 (포인터)에 대한 핸들이 유효하고 – Steve

답변

1

차이점은 메모리 레이아웃입니다.

프로세스에 영향을주는 미묘한 요소가 많이 있습니다. 하나의 경우, 디버거에서 JIT는 약간 다른 코드를 생성합니다 (디버거를 수용하기 위해). 디버거 설정에 따라 Visual Studio에서 프로세스의 다른 코드 (예 : .vshost.exe)를 삽입 할 수도 있습니다. 디버거는 또한 타이밍에 영향을 줄 수 있으며, 이는 경쟁 조건을 노출 시키거나 메모리가 할당되는 방식을 변경할 수 있습니다.

짧게 말하면 응용 프로그램을 닫을 때까지 [약간 또는 크게] 다른 메모리 레이아웃이 생깁니다. 그리고 분명히 다른 호스트 응용 프로그램에도 동일하게 적용됩니다.

하지만 그것은 그 이야기의 한 면일뿐입니다. 다른 측면은 dbexpress에 버그가 있다는 것입니다. 또는 다른 모듈이 dbexpress 데이터에서 메모리 손상을 일으킬 수 있습니다. 어느 쪽이든, dbexpress는 임의의 주소에 액세스하는 것을 끝냅니다.

그 주소는 한 경우에는 할당되지 않은 메모리 페이지에 있지만, 다른 경우에는 할당 된 주소에있을 수 있습니다 (메모리 레이아웃이 다르므로 기억하지 않으시겠습니까?). 후자의 경우, dbexpress는 메모리에서 값을 읽고, 그 값으로 뭔가를 수행하며, 결과에 만족스럽게 나타나고 정상적으로 종료합니다.

(추적 할 수없는 경합 조건과 함께) 이는 미숙 한 비 관리 코드 (내 경험에 따르면 매우 자주 델파이가 관련되어있는 경우)에서 매우 공통적 인 문제입니다.

해결책? 조건을 변경하십시오. 다른 컴퓨터에서 시도 할 수 있습니다. 또는 동일한 기계에서, 그러나 무거운 하중 하에서. 또는 모듈을 더로드하십시오. 또는 일반적으로 수행하는 모듈을로드하지 마십시오. 그것으로 놀아 라.

그건 그렇고, 네가 진심으로 개인적으로 그렇게하지 않는다. 그것은 건초 더미의 핀을 찾고 끝나지 않고 정서적으로 모험을 피 웁니다. 또한 다른 장소에서 AV를받을 확률이 높습니다 (하지만 근본 원인이 동일하기 때문에).

다른 옵션 (더 나은 옵션)은 디버그 인쇄입니다. 즉, dbexpress의 소스 코드가있는 경우 (미안하지만, 익숙하지 않다).

그렇지 않으면 델파이 구성 요소에 대한 매우 신중한 코드 검토부터 시작할 것입니다.아마 거기에서도 디버그 할 수있을 것입니다.

행운을 비네.

0

호스트 응용 프로그램이 예외를 숨길 수 있습니다. 셧다운 오류가 가장 힘듭니다. 일부 로깅을 추가하여 디버거가 분리되었을 때 예외가 발생하는지 확인하십시오.

+0

하지 않는하지 않을 때 나는 호스트 응용 프로그램이 오류를 숨기고하지 않습니다 확신 해요 델파이에서 자동화 dll을 디버깅 할 수 있습니다. 디버깅을 사용하여 호스트를 시작할 때 문제가되는 행은 괜찮습니다.하지만 VS 외부에서 시작하면 안됩니다. – Steve

관련 문제