내 응용 프로그램에 정말 이상한 버그가 발생했습니다. 다른 라이브러리 중에서 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;
}();
한 번에 하나씩 특수화를 다시 추가하십시오. 실패 할 때마다 방금 추가 한 특정 것을 분석하십시오. – Mat
을 사용하면 응용 프로그램이 작동하도록 주석을 달고 해당 코드를 사용하는 코드의 샘플을 제공 할 수 있습니다. – bolov
@Mat 좋은 생각. 나는 이미 테스트를 위해 하나의 전문화를 설정했다. 추가되면 버그가 발생하고 그렇지 않은 경우 버그가 발생합니다. – danijar