2013-12-07 1 views
2

내 응용 프로그램에 정말 이상한 버그가 발생했습니다. 다른 라이브러리 중에서 Bullet Physics을 사용하는 비디오 게임입니다.유형 특성으로 인한이 버그를 디버깅하는 방법은 무엇입니까?

SQLite 인터페이스를 구현 한 후 충돌 감지가 엉망입니다. 플레이어는 지형을 통과하거나 보이지 않는 물건과 충돌합니다. 내게는 잘못된 메모리 액세스처럼 보입니다. 데이터베이스 기능은 잘 작동합니다.

이미 문제의 범위를 좁힐 수 있습니다. SQLite 인터페이스는 다른 저장 가능 유형에 의해 제공되는 유형 특성을 사용합니다. 모든 특성 전문화를 주석 처리 할 때 충돌은 정상적으로 작동합니다.

어떻게이 버그의 원인을 찾을 수 있습니까? 다른 정보가 문제 해결에 유용 할 수 있다면 알려 주시면 문제를 해결할 수 있습니다.

업데이트 : 이것은 적절한 충돌에 대해 설명해야하는 코드입니다. 저장 가능 유형은 Person입니다.

타입/인/type.h

#pragma once 
struct Person 
{ 
    float Height, Mass; 
    // ... 
}; 

타입/인/trait.h

#pragma once 
#include "type.h" 
#include "manager/data/manager.h" 
using namespace std; 

template <> 
struct ManagerDataTrait<Person> 
{ 
    static const unordered_map<string, string> Fields; 
    static void Serialize(Person *Instance, ManagerData::Serialization *Data) 
    { 
     Data->FLOAT("height", Instance->Height); 
     Data->FLOAT("mass", Instance->Mass); 
    } 
    static void Deserialize(Person *Instance, ManagerData::Deserialization *Data) 
    { 
     Instance->Height = Data->FLOAT("height"); 
     Instance->Mass = Data->FLOAT("mass"); 
    } 
}; 

타입/인/general.cpp

#include "type.h" 
#include "trait.h" 
using namespace std; 

const unordered_map<string, string> ManagerDataTrait<Person>::Fields = []{ 
    unordered_map<string, string> fields; 
    fields.insert(std::make_pair("height", "FLOAT")); 
    fields.insert(std::make_pair("mass", "FLOAT")); 
    return fields; 
}(); 
+1

한 번에 하나씩 특수화를 다시 추가하십시오. 실패 할 때마다 방금 추가 한 특정 것을 분석하십시오. – Mat

+0

을 사용하면 응용 프로그램이 작동하도록 주석을 달고 해당 코드를 사용하는 코드의 샘플을 제공 할 수 있습니다. – bolov

+0

@Mat 좋은 생각. 나는 이미 테스트를 위해 하나의 전문화를 설정했다. 추가되면 버그가 발생하고 그렇지 않은 경우 버그가 발생합니다. – danijar

답변

0

사용자 Yakk이 의견에 대한 나의 질문에 대답했습니다.

특수화 유형 옆에 표시되어야합니다. 정의되지 않은 동작은 한 장치에서보고 정의하지 않으면 발생합니다.

관련 문제