2010-06-15 3 views
6

DirectX 응용 프로그램의 끝에서 "Direct3D 장치의 참조 수가 0이 아니므로 일부 개체가 해제되지 않았습니다."라는 메시지가 나타납니다. " 응용 프로그램이 크고 나에 의해 작성되지 않은 경우, 어떤 자원이 해제되지 않고 디버깅 할 수 있습니까?DirectX 10 Resource Leak

답변

1

here과 같이 DirectX 제어판 유틸리티를 사용할 수 있습니다. "Break on Memory Leaks"체크 상자를 켜면 "Break on AllocID"를 사용하여 해제되지 않은 리소스를 찾을 수 있습니다.

+2

DX10에서이 작업을 수행 할 수있는 방법이 있습니까? – yxk

+0

답변은 DX10과 관련이 없으며, 묻는 사람이 DX10 정보를 명확하게 요청한 경우에만 DX9에 적용됩니다. – IneQuation

6

첫 번째 단계는 DirectX 디버그 DLL 인 via the DirectX Control Panel을 사용하는 것입니다. (IIRC, DirectX SDK를 설치할 때 선택 항목이므로 설치해야 할 수 있습니다.)

다음에 응용 프로그램을 실행하면 DirectX에서 누출에 대한 정보를 더 많이 제공해야합니다. 이 같은

D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug 
               allocation id ^^^^^^ 

또는 : 당신이 할당 ID를 일단

Direct3D9: (WARN) :Memory Address: 00385580 lAllocID=1 dwSize=000047f8, (pid=00000474) 
             allocation id^

, 당신은 그 할당이 발생하면 휴식의 DirectX를 알 수 있습니다 특히,이 같은 줄을보고 할 것 프로그램에서 DirectX 제어판의 Break on AllocID 설정을 (또는 위에서 언급 한 레지스트리 키를 설정하여) 설정하십시오.

그런 다음 호출 스택을 검사하여 DirectX 호출이 무엇인지 확인해야합니다.

+2

이 방법은 DX10에서 작동합니까? 경고 메시지가 표시되지 않습니다. – yxk

+0

답변은 DX10과 관련이 없으며, 묻는 사람이 DX10 정보를 명확하게 요청한 경우에만 DX9에 적용됩니다. – IneQuation