실시간 디버깅 기법


18

변수를 조정하고, 몇 분이 걸리는 코드를 컴파일하고, 코드를 실행하고, 조정이 잘못된 방향에 있음을 인식하고 프로세스를 다시 반복하는 루틴과 같은 것은 없습니다.

세션이 진행되는 동안 게임 로직과 상호 작용을 시작하고 싶습니다. 이 작업을 처리 한 몇 가지 방법은 무엇입니까?

iOS, C / C ++ 및 C # / XNA에 대한 솔루션을들을 수 있도록 개방되어 있습니다.

답변:



4

완전히 해석 된 언어를 통합하면 게임 요소를 매우 쉽고 빠르게 다시 작성할 수 있습니다.

이를 위해 Python, Lua 등을 모두 명시 적으로 활용할 수 있습니다. 엔젤 엔진은 아마도 예를 제공 할 수 있습니다.

핫 로딩은 체크 아웃해야 할 또 다른 요소입니다 (기본적으로 구성 파일, 아트 요소 등 자산이 변경되었음을 알리는 이벤트가 시작되고 일련의 컨디셔너를 통해이를 실행 함) 기존 형식을 새 형식으로 교체하기 전에 최종 형식.

나는 핫 로딩을 사용한 빠른 프로토 타이핑 엔진과 함께 일 해왔고, 그것은 즐거웠습니다.


2

CNA, C # 및 XNA가 포함 된 C #에 관한 한 Visual Studio에는 뛰어난 디버깅 도구가 있습니다. 코드의 어느 시점에서나 응용 프로그램을 실시간으로 일시 중지하고 언제든지 변수에 지정된 값을보고 함수 호출을 단계별로 수행 할 수 있습니다. 호출 스택 등을 분석합니다. 또한 Pix 및 CLR Profiler와 같은 도구를 사용하면 DirectX (Pix) 및 CLR 기반 언어 (CLR Profiler)로 개발할 수 있습니다.

또한 게임 작업에서 특히 유용한 부분 중 하나는이 거대한 영역에 디버그 텍스트, 그래픽 등을 쓸 수 있다는 것입니다. 메모리 사용량, 그린 객체 / 버텍스 수, 프레임 속도 등의 실시간 그래프는 화면에 그리는 일반적인 것입니다.


1
VS는 뛰어난 개발 도구이지만 일반 디버깅에는 중단 점을 찾아 내고 코드를 단계별로 실행하고 변수를 변경하고 흐름을 다시 시작하는 데 시간이 걸립니다. 이 질문은 인터페이스 구성 요소를 이동하거나 보스의 공격률을 조정하는 등의 작업을 즉시 수행 할 수있는 방법을 찾고 있습니다.
David McGraw

2

C / C ++에서 간단한 트릭은 조정 가능 변수를 정적 변수에 넣고 중단 점을 트리거하며 디버거에서 정적을 변경하고 종료 될 때까지 지속되는 것입니다.


함수 내부의 정적 변수로 만드십시오. 글로벌 정적 Visual Studio 인 경우 해당 값을 표시하지 못할 수 있습니다.
Kaj

2

HTTP 로깅 은 큰 도움이되며 실행하기가 어렵지 않습니다. 이를 실행하는 빠른 방법으로 Google App 엔진을 사용할 수도 있습니다. 데이터는 항상 유용합니다.

스크립트 및 XML 은 즉시 다시로드 할 수 있으며 재설정 할 필요가 없습니다. 게임을 중단하지 않고 실패 할 수 있습니다. 이는 아티스트, 테스터 및 디자이너에게 많은 힘을 제공합니다.

게임 내 디버그 메뉴 간단한 게임 디버그 메뉴로, 어린이로 스폰하고 엔진 슬라이더와 게임 슬라이더로 게임을 정지시킬 수 있습니다. 런타임시 키 번호를 조정하고 하나 또는 두 개의 디버그 기능 또는 정보 덤프를 수행 할 수 있습니다.

나는 또한 David의 대답에서 언급 한 ASYNC 소켓을 좋아합니다.

사용 하기 쉬움 게임 팀은 이러한 도구에 추가하여 매우 쉽게 사용할 수 있어야합니다. 그렇지 않으면 사용되지 않을 것입니다.


2

나는 Sean James가 이미 그것을 알고 있다 . 그러나 진지하게, Visual Studio (특히 디버깅 도구)는이 점에서 훌륭합니다.

요즘에는 C ++을 많이 사용하지 않으므로 이것이 얼마나 잘 적용되는지 확실하지 않습니다. 그러나 C # (C # Express 포함)에는 다음이 있습니다.

  • 편집 및 계속 -게임 로직을 도매로 변경할 수 있습니다.
  • 시계 창 - 당신이보고 쉽게 변수를 수정할 수있는 곳.

그리고 이것은 당신의 마음을 날려 버릴 수 있습니다 (내가 그것을 알았을 때 내 바람을 불었습니다) :

직접 실행 창은 실제로 찾기가 어렵습니다 (디버그 / Windows 메뉴에 있음).

Visual C # 디버거 사용의 유일한 단점은 const값 변경을 좋아하지 않는다는 것 입니다. 그래서 나는 보통 게임 플레이 관련 값 static을 조정하면서 값 을 조정합니다.

(또한 모니터가 두 개인 경우 많은 도움이됩니다.)


이제 위의 방법은 응용 프로그램을 일시 중지시키는 것과 관련이 있음을 인정해야합니다.

이 드문 경우에, (XNA에서) 내가하는 일은 단순히 약간의 코드를 해킹하여 (위와 같이 아마도 편집과 계속을 사용하여) Keyboard.GetState().IsKeyDown()실제로 (쉽게 타이핑하기 쉬운 래퍼가 있음 ) 잡고 조정하는 것입니다. 키 스트로크에 의한 가치. 더 복잡한 것은 노력할 가치가 없습니다.


실제로 필자가 일반적으로 가장 중요 하게 생각하는 것은 실시간으로 값 을 시각화 (수정하는 대신) 할 수 있다는 것입니다. 이를 위해 프레임 끝에 줄과 텍스트를 버퍼링 할 수있는 멋진 작은 클래스가 있습니다. 빠른 프로토 타이핑에도 유용합니다.

(그리고 다시 한 번, 이러한 시각화를 런타임에 "편집 및 계속"할 수 있다는 것이 좋습니다.)


(출처 : andrewrussell.net )
( 여기에서 )

현재 게시 할 "좋은"소스가없는 것 같습니다 (나중에). 그러나 기본적으로 이것은 ( 이 라운드 라인 라이브러리의 경우 ) 과 XNA의 내장 SpriteBatch의 문자열입니다. public static어딘가에 만들고 모든 것을 "세계 공간"에 나타나도록 다음 적절한 프레임으로 모든 것을 그립니다.


1

C / C ++를위한 간단한 리플렉션 시스템을 작성하는 것은 쉽지 않습니다. 이렇게하면 게임의 모든 변수 (네트워크 도구, 키보드 또는 조이패드 등)를 탐색하여 마음의 내용으로 변경할 수 있습니다. 그것은 나를 위해 작동하지만 위의 모든 대답은 똑같이 유효합니다.

추가 편집 :이 스레드는 이제 스레드 제목에 따라 디버깅하지 않고 조정에 관한 것입니다.


0

여러 스튜디오에서 본 솔루션 중 하나는 네트워크를 사용하여 프로그램에 연결하는 외부 디버깅 앱입니다. 이 앱은 특정 노출 변수를 보여 주며 실시간으로 편집 할 수 있습니다. 새로운 변수를 추가하는 것은 게임 코드에 매크로를 추가하는 것입니다.

게임 측 매크로, 서버 / 클라이언트 프로토콜 (XML을 앞뒤로 직렬화 한 솔루션) 및 클라이언트 작성의 초기 설정은 매우 큽니다. 그러나 특히 통신에 네트워크를 사용하면 모든 플랫폼에서 작업 할 수 있으므로 매우 유용합니다.


0

변수의 로딩 및 읽기를 텍스트 파일에 바인딩하고 콘솔의 특정 키 바인딩 또는 명령을 사용하여 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.