2009-08-13 4 views
0

런타임의 2 ~ 4 시간이 지나면 무작위로 (겉으로보기에) 충돌하는 프로그램이 있습니다. Visual Studio Pro 2008에서 C++로 개발 중입니다. 충돌이 주입 된 DLL (타사 소프트웨어의 메모리 공간에 삽입 된 beeing)에서 발생하기 때문에 Visual Studio 디버거를 사용할 수 없지만 일부 출력을 얻을 수 있습니다. iter-process 통신을 사용하는 콘솔 (나는 사서함을 사용하고있다). 여기에 질문이 있습니다 : 이것을 디버깅하는 가장 좋은 방법은 무엇입니까? 타사 소프트웨어/추가 기능/디버거가 충돌을 일으키는 NULL 변수가 무엇인지 알 수 있습니까?임의의 크래시 디버깅

도움 주셔서 감사합니다.

+0

당신이 문자로 DLL의 디버그 버전을 사용하지 않는 한, 당신은 운이 제 3 자 코드 충돌하는 것보다 아무것도 더 복잡 할 수도 있습니다! –

+0

그것은 실제로 내가 주입 한 내 자신의 DLL입니다. 그래서 난 소스에 액세스 할 수 –

+0

내 대답을 받아 들였기 때문에 무작위로 호기심, 메모리 손상 또는 메모리 부족 또는 다른 리소스 예외 windbg 중단 했나요? –

답변

1

Windbg에서 프로그램을 실행 해보십시오. 충돌이 발생하면 원인에 대한 구체적인 정보를 얻을 수 있습니다. dll을 호스팅하는 타사 프로세스를 시작한 다음 프로세스에 windbg 디버거를 연결할 수 있습니다. 충돌이 발생하면 windbg은 중단되어 일부 유형의 예외를보고합니다. 그런 다음

귀하의 질문은 나를 위해 두 개의 알람을 설정, 스레드 스택에 등

0

G'day을 찾기 위해 다양한 windbg를 명령을 사용할 수 있습니다.

* a memory leak smell which could be verified by running the same set of input and seeing if the crash happens at about the same elapsed time, and 
* a specific test case that is tickling something in your third party library. You could do a binary chop on your input data to track down what's triggering this. I just had to do this to track down which request out of over two hundred thousand was triggering a memory leak in a custom Apache module. Divide and conquer. Divide and conquer. Divide and conquer. Repeat and rinse. 

HTH

'Avahappy,