2025-01-09_TIL

별빛에소원을·2025년 1월 9일

TeamSparta-Unreal1기-TIL

목록 보기
25/90
post-thumbnail

알고리즘 : 모의고사

반복적인 패턴을 나타내는 수열을 분석하는 문제라고 생각했다.
분석은 매우 어려웠다 chatgpt에게 맡겨도 인덱스에 맞아떨어지는 패턴을 구하는게
패턴이커질수록 어려웠다 그러나 잘 생각해보면 수열을 분석할 필요가 없다.
패턴을 배열에 넣어놓고, 배열 인덱스로 패턴을 구하면 되는 문제였다.
그렇게 보니 문제는 간단해졌다. 뒤에 출력조건은 별거 아니였다. 문제를 바라보는 방식에 따라서
쉽게 풀리고 어렵게 풀리는 것들이 많은데 인식 전환이 참 중요하다고 계속 느낀다.

#include <string>
#include <vector>
#include <algorithm>
std::vector<int> solution(std::vector<int> answers) {
    size_t size = answers.size();
    std::vector<int> answer = {};
    std::vector<int> user(3);
    int using1[5] = { 1,2,3,4,5 };
    int using2[8] = { 2,1,2,3,2,4,2,5 };
    int using3[12] = { 3,3,1,1,2,2,4,4,5,5};
    for (size_t i = 0; i < size; ++i)
    {
        user[0] += using1[i % 5] == answers[i] ? 1 : 0;
        user[1] += using2[i % 8] == answers[i] ? 1 : 0;
        user[2] += using3[i % 10] == answers[i] ? 1 : 0;
    }
    int max = *std::max_element(user.begin(), user.end());
    size = user.size();
    for (size_t i = 0; i < size; ++i)
    {
        if (max == user[i]) answer.push_back(i+1);
    }
    return answer;
}

1. Git_Desktop

생각보다 이것을 다루는 문제가 까다로움을 느꼈다.
Unreal 프로젝트를 깃허브에 올리는 데는 한번 실수하면 Repository를 지우고 다시 만드는게 훨씬 빠를정도로 어려웠다.

지우고 VisualStudio에 깃허브와 연동하는 기능으로 쉽게 올렸다. 올리고나니 허무하더라

디버그 팁과 단축키

  • 중단점
    • 실행을 특정 지점에서 멈추고 상태를 확인
    • 설정방법 : F9
    • ctrl + 9 : 중단점의 활성 / 비활성
    • ctrl + alt + b : 중단점 창 실행
  • 실행 제어
    • F5: 디버깅 시작/계속
    • Shift + F5 / ctrl + break : 디버깅 중지
    • F10: 한 단계씩 실행 (Step Over)
    • F11: 함수 내부로 진입 (Step Into)
    • Shift + F11: 함수 종료 후 반환 (Step Out)
  • 빠른 보기 (Quick Watch)
    • 변수나 식의 값을 즉시 확인
    • 선택 후 Shift + F9 또는 오른쪽 클릭 후 Quick Watch 선택

2. 디버깅 팁

1. 호출스택



호출 스택은 프로그램 실행 중 함수 호출과 관련된 정보를 관리하는 특수한 메모리 구조이다.
함수 호출과 반환의 순서를 관리하며, 특히 재귀 호출이나 중첩 함수 호출이 많은 경우 호출 스택이 중요하게 작동 한다.

2. 중단점 설정

  • 조건에 따라 중단점을 활성하기
    • 중단점 우클릭 Conditions
    • ex) 특정 변수 값이 10 이상일 때 멈추기.

3. 데이터 기록

  • 중단 없이 변수 상태를 기록할 수 있다.
  • 중단점 우클릭 > Actions > Log a message to Output window

릭 검출

#include <crtdbg.h>
#include <iostream>

int main() 
{
    // 디버그 플래그 설정
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

    // 예제: 메모리 릭 발생 코드
    int* leak = new int[10]; // 메모리 할당 후 delete 누락

    // 디버깅 메시지
    std::cout << "Memory leak detection example." << std::endl;

    return 0;
}

3. Visual Studio 단축키 모음

주요 단축키

  • Ctrl + K, Ctrl + C: 주석 처리
  • Ctrl + K, Ctrl + U: 주석 해제
  • Ctrl + K, D: 코드 정렬
  • Ctrl + M, M: 코드 접기/펼치기
  • Ctrl + Q / Ctrl + T : 검색 기능 열기 (비쥬얼 스튜디오의 기능들)
  • Ctrl + K + O: 헤더 / CPP 전환

탐색 및 작업

  • Ctrl + ,: 전체 파일에서 검색
  • Ctrl + Shift + B: 빌드
  • Ctrl + Tab: 열린 파일 간 이동
  • Ctrl + Alt + L: 솔루션 탐색기 열기
  • Shift + F12 : 참조 호출된 모든 함수 찾기
  • Ctrl + F12 / F12 : 함수 /변수 정의로 이동
  • Ctrl + . + D : 헤더기반 CPP 함수 자동 작성

4. Unreal디버깅

4.1 최적화 옵션 끄기(Advanced)

언리얼을 진행 하다 보면 중단점이 적용되지 않는 현상이 발생 디버깅 하고 싶은 함수의 시작 부분과 끝 부분을 #pragma optimize(”” , off) / #pragma optimize(”” , on) 으로 감싸줌 (보통 Tick / NativePaint) 등 최적화를 위해 빠르게 지나가는 부분에 해당된다.

4.2 블루프린트 디버그


원하는 블루프린트에 F9버튼을 이용해서 중단점을 생산 할 수 있다.

4.3 CPP Message

UE_LOG(LogTemp,Warning,TEXT("Test Message"));

//블루프린트 Print String과 동일
float DisplayTime =2.0f;
FColor TextColor = FColor::Cyan;
FString Message = TEXT("DisplayTest Message");

if (GEngine) // GEngine이 유효한지 확인
{
    GEngine->AddOnScreenDebugMessage(
        -1,                 // Key 값 (-1은 메시지가 매번 새로운 ID로 출력됨)
        DisplayTime,        // 화면에 표시될 시간(초)
        TextColor,          // 메시지 색상
        Message             // 출력할 메시지
    );
}

4.4 언리얼 CMD 활용

UFUNCTION(Exec)
void SpawnTestActor(int count);

언리얼 함수 내 Exec 키워드를 삽입시 언리얼 커맨드 라인에서 원하는 타이밍에 실행 할 수 있다.
네트워크 상 Authority를 가지고 있는 Character / PlayerController / GameMode 에서만 호출이 가능하다.
`키 1번 왼쪽에 물결키로 에디터에서 커맨드 라인을 부를 수 있다.




링크

Visual Studio 디버그 문서

Microsoft Debug Tip

Visual Studio 단축키 모음

Visual Studio 단축키

profile
취미로 게임하는사람

0개의 댓글