2019년 7월 4일 목요일

Visual Studio에서 PDB 파일을 찾거나 열 수 없습니다 에러 해결 방법 (C,C++,C#,.NET)

비주얼 스튜디오를 사용해서 프로그램 작성하다보면 한번쯤은 겪을 에러인 PDB 파일에 대한 에러 해결방법에 대해 알아보겠습니다.


오늘도 역시 새 프로젝트를 하나 생성하고


시작 스레드에


가볍게 하나를 작성하고


디버깅을 실행하니


코드라곤 콘솔에 문자 한 줄 작성하는거 밖에 없는데 디버깅을 실행하지 못했다라는 메시지가 뜹니다.


당황한 마음과 함께 로그를 살펴보면 프로그램 로드는 문제 없지만 그 전에 어떤 dll 파일과 함께 PDB 파일을 찾을 수 없다는 메시지가 보이는데요.


디버깅은 안되지만 희안하게도 프로그램 로드는 잘만 되는 상황이 발생합니다.

이 문제는 비주얼 스튜디오가 프로젝트를 빌드하는 과정과 디버깅 하는 과정에 차이가 있기 때문인데요.

프로그램에 문제만 없으면 되는 빌드와는 달리 디버깅은 프로그램의 진행과정에 참조되는모든 소스들과 메모리 주소, 실제 값 등이 필요하기 때문에 이 어셈블리와 주소들을 찾아주거나 사용자가 알 수 있는 값으로 해석해 주는 해결사가 필요합니다.

PDB(Program Debug Database)은 이름 그대로 프로그램을 디버깅 할 때 필요한 이 정보들을 찾을 수 있는 키가 저장 되어 있는 파일인거죠.

PDB 파일이 없이 디버깅은 진행 할 수도 있겠지만 그렇게 되면 제대로 된 참조를 보지 못한다던가 어셈블리만 실컷 구경하게 될겁니다.

위에서는 이 PDB 파일을 생성하고 관리해줄 dll과 파일이 없었기 때문에 프로그램 로드에는 성공하였지만 디버깅에는 실패하는 결과로 이어졌던거죠.

비주얼 스튜디오 6.0 이전 버전을 쓰던 머나먼 옛날에는 모든 프로젝트에 설정을 따로 해줘야 했었지만 이후로는 이렇게 가끔식 마주하게 되는 문제가 되었습니다.

해결 방법은 굉장히 간단합니다.


비주얼 스튜디오의 메뉴 중 디버그 항목의 옵션으로 들어가서


기호 항목에 기호 서버의 체크가 풀려 있는데 이걸 체크하면

위와같이 로딩이 필요할 수 있다는 안내말이 나오고


서버를 체크한 뒤 확인을 하면


첫 디버깅때 이렇게 기호를 로드하기 위한 대기시간이 조금 필요하고


그 이후부턴 이렇게 기로 로드가 이루어집니다. ^^

이제 디버깅을 하면


요렇게 깔끔하게 디버깅을 하실 수 있습니다. ^^


디버그 폴더에도 이렇게 pdb 파일이 자리잡고 있네요. ㅎㅎㅎ
Share:

2019년 7월 3일 수요일

C#으로 TCP/IP 서버 만들기

이번에는 C#으로 TCP/IP 프로토콜을 지원하는 서버를 만들어 보겠습니다. ^^

통신 관련 프로그램을 작성할 때 테스트에 꼭 필요한 녀석이라 임시로 만들곤 했었는데 이번에 생각난김에 조금 정리한걸 블로그에 올려봅니다.

서버 실행 파일 다운로드 링크 - 다운로드
소스 코드 다운로드 링크 - 다운로드
(해당 다운로드 링크는 제 구글 드라이브에 공유된 파일이라 안전합니다.)

(콘솔 형태의 간단한 버전도 포스팅 되었습니다 - 이동하기)


일단 가볍게 윈폼 프로젝트를 만들어서 기본 레이아웃을 구성합니다.

레이아웃은 우선



서버를 구성할 아이피와 포트 번호를 입력 받을 부분과


서버 이벤트를 책임질 토글 스위치 부분, 마지막으로


서버 이벤트 로그와 결과 값을 표현할 로그 화면부로 구성해봤습니다. ^^

이제 핵심인 코드를 작성해 볼까요?

이번 코딩은 소켓 통신의 구성 요소들을 C#으로 표현하는 것과, 사용자로부터 입력 받고 로그를 표현하는 윈폼 프로그램의 메인 스레드, 서버를 운영 할 서버 스레드 간 분기와 동기화 부분에 중점을 두고 작성하였습니다.


그럼 주요 부분을 볼까요?


.NET에서 소켓 통신은 System.Net.Sockets에서 담당합니다.

스레딩도 함께 참조 했어요.


서버 구성에 필요한 변수들입니다.

TCP/IP 서버이니 Tcp리스너 하나 선언하고, 클라이언트로부터 받은 데이터를 담을 스트림 하나와 그 데이터를 변환시킬 byte 배열 하나도 필요합니다.

마지막으로 서버 운영을 담당할 스레드도 하나 만들었습니다.

그리고 서버의 안내말과 로그는


스트링 빌더를 하나 선언해서 길이 제한도 달고 해당 텍스트 박스에 이쁘게 보이도록 세팅합니다.

이제 뭔가를 로그창에 남기고 싶으면


요렇게 스트링 빌더를 세팅해주는 매서드를 호출시키면 됩니다. ^^

이러면 프로그램이 처음 실행되고 필요한 기본 세팅은 갖추어 졌네요.

이제 사용자가 서버 실행이나 종료를 위해 토글 스위치를 클릭했을 경우엔


요렇게 플레그 하나를 기준으로 서버 실행과 종료를 담당할 매서드를 만들고

서버를 실행할 매서드는


바로 서버 운영을 맡길 스레드를 시작 시키도록 합니다.


스레드는 서버 구성에 필요한 아이피와 포트 번호 정보를 가져와서 Tcp 리스너를 활성화 하고 필요한 로그와 세팅을 메인 스레드에 간섭하여 작성해줍니다.


그리고 해당 리스너에 클라이언트로부터 받은 데이터가 감지되면 바로 필요한 형태로 변환 시켜 로그창에 보이도록 하였습니다. ^^

이제 스레드나 리스너가 종료될때 까지 계속 서버는 실행되고 있겠죠.


서버를 종료 시킬 매서드는 우선 실행중인 리스너와 스트림의 잔여값 여부를 확인하고, Tcp 리스너와 해당 스레드를 종료시킴으로 서버 종료를 유도합니다.

좀 더 정밀한 작동을 원한다면 약간의 딜레이를 주고 확인하는 로직을 두면 될꺼 같네요.

서버가 종료되면 필요한 정보를 다시 로그 창에 작성시킴으로 매서드는 종료됩니다.


마지막 부분은 로그 창을 깨끗하게 정리해줄 버튼 이벤트와 데이터 변환에 필요한 매서드입니다.

Tcp 서버와는 상관 없는 부분이라서 아래로 빼두었습니다. ^^

이제 프로그램을 실행하면


요렇게 나오며


서버 오픈 클로즈 이벤트 잘 실행되고 로그도 이쁘게 찍히네요. ^^

Clear 버튼으로 로그 삭제도 무난이 작동합니다.


요녀석은 TCP/IP 프로토콜을 사용하는 클라이언트 프로그램인데요.

텍스트 파일을 읽어서 해당 내용을 서버에 전송하도록 만들었습니다.


요렇게 서버에 접속 시키고 전문을 전송하는 테스트를 하면


이쁘게 통신되는 모습입니다. ^ㅡ^

(테스트 영상입니다.)

다음편은 클라이언트로 찾아뵙겠습니다.

봐주셔서 감사합니다!
Share:

2019년 6월 30일 일요일

[2] 패스오브엑자일(Path of Exile) 플레이 (개요 3편, 게임 시스템)

전편에 이어 기본적인 POE 시스템에 대한 설명을 이어가겠습니다.


POE에서는 모든 캐릭터가 같은 스킬 트리를 공유하면서도 시작 위치를 다르게 함으로 클래스별 개성을 부여했는데요.

예를 들어 지능과 마법에 관한 스킬들이 많이 분포한 12시 파랑색의 스타팅을 위치로 두어 자연스럽게 지능이 주력인 클래스도 유도했고


(등장부터 대놓고 마법사임을 어필하는 위치)

탬플러는 지능과 힘 중간쯤 위치한 10시 보라색에 두어 타격이나 마법 모두 주력이 되도록 유도했습니다.


(지팡이와 마법 어느쪽으로 조질지 고민하는 성직자)

캐릭터를 생성한 다음 스킬 트리를 보시면


해당 캐릭터 시작점은 멋진 일러스트와 함께 현재 스탯 수치를 알려주는 창으로 바뀌어 있고,


전직을 하면 전직 스킬 트리도 볼 수 있도록 변경되어집니다.

스킬 트리를 채우고 있는 노드들은 크게 네 가지 종류가 있는데


가장 작은 이 소형 노드들은


한 가지 종류의 스탯을 10씩 올려주는 스탯 노드이거나


데미지 상승,


쉴드나 생명력, 마나 증가


스킬 데미지 상승과 같은 주로 공방의 스펙을 올려주는 옵션을 가진 패시브 노드들로 되어 있으며


소형 노드 보다 좀 더 크고 테두리도 금빛으로 된 중형 노드들은 노드 고유의 이름도 가지고 있고 옵션도 소형 노드들 보다 훨씬 강력해집니다.


위 그림 처럼 두 종류의 스탯을 20씩 올려주면서 추가 옵션을 달아준다 던가


스탯을 %단위로 올려주거나


아예 특정 스킬을 개조해버리는 경우도 있습니다. ^^

그리고 선행 노드들이 많이 필요한 외각으로 갈수록 효과도 더 좋아져서 최외각에 있는 중형 노드들은


속성 데미지 25%에 흡수 옵션이 달려있거나


속성의 효율을 올려주는 등 태크 트리의 핵심이 될만한 옵션들을 쉽게 찾아 볼 수가 있죠.

그리고 이런 중형 노드 보다 더 크고, 테두리도 금박인


대형 노드도 있는데요. 이 노드들은


중형 노드 보다 더 강력한 데미지 증폭 옵션이 있거나



전투 스타일을 바꿀 만한 특별한 옵션들로 채워져 있습니다.

스펙을 올려주던 중, 소형 노드들과는 달리 설정을 유리하게 바꾸는 경우가 많아서 많이 찍기 보다는 전투 전략에 맞춰 찍는걸 추천드립니다.

마지막으로


기존 노드들과는 달리 아무런 효과가 없는 주얼 슬롯이라는게 있는데요.

여기는 정해진 옵션이 없는 대신


주얼 이라는 아이템을 노드에 장착 시킬수 있으며, 장착시 해당 아이템의 옵션이 노드에 적용되는 방식입니다.

디아블로에서 주얼은 아이템에 장착하는 소모품이었지만 여기선 스킬에 투자하는 아이템이 되었네요. ㅎㅎ

주얼도 다른 아이템들과 마찬가지로 일반 - 매직 - 레어 - 유니크의 단계를 가지고 있으며, 일부 특별한 주얼들은 위 그림과 같이 주변 노드의 스탯에 따라 추가 옵션이 활성화 되는 경우도 있습니다. 이 옵션은 주얼을 장착 시키면


주얼 고유의 영역이 발생하고 해당 영역 내에 활성화된 스탯 노드의 합으로 주얼 옵션이 결정 되는 거죠.

이런 독특한 노드들과


방대한 스킬 트리의 조합으로 정말 다양하고 개성있는 나만의 캐릭터를 육성하는 재미를 느낄 수 있습니다. ^^

(물론 효율을 극대화한 정형화된 스킬 트리 역시 많습니다.)


(이런 극과 극을 오가는 스킬 트리 속에 밸런스를 찾는 재미가 일품이죠)


이런 방대한 스킬 트리와 조합을 이룰 액티브 스킬들은


전편에서 소개했던 바로 이 스킬잼을 통해 사용할 수 있는데요.

스킬잼들은 필요 스탯이나 효과에 따라 세 종류로 나누어 지는데


힘 스탯에 제한을 받는 붉은색 잼,


지능에 제한을 받는 푸른색 잼,


민첩에 영향을 받는 녹색 잼입니다.

이 스킬잼들은 아이템 홈 색상과 짝을 맞추는데


아이템 홈 색상은 스킬잼과 동일한 빨 - 파 - 초 세 가지 색상에 모든 색상의 잼을 착용할 수 있는 흰색까지 총 네가지 색상을 가지고 있습니다.

사용할 스킬잼과 짝을 이룰 아이템을 구했다면


요렇게 착용하고

해당 아이템을 통해


액티브 스킬을 사용하는거죠. ^^

스킬을 소개했으니 이제 장비로 넘어가 볼까요?


먼저 POE의 장비창은 무기 스왑 기능까지 디아블로와 착용 부위가 동일하지만, 물약 공간은 벨트에 의존적인 디아블로와는 달리 독립적인 5개의 고정 인벤토리를 가지고 있습니다.


그리고 4X10의 빡빡했던 인벤토리는 5X12로 굉장히 넓어졌으며 결정적으로


보관함의 수용 크기가 엄청나며


보관함의 각종 편의성을 캐쉬를 통해 제공하고 있어 장비와 아이템 수용에 한계가 없다는 장점이 있습니다.

그리고 모든 장비들은 디아블로와 동일하게


노말 - 매직 - 레어 - 유니크 등급으로 구분되며 아이템을 설명하는 색상 또한 흰색 - 파랑 - 노랑 - 갈색으로 표시됩니다.

캐릭터가 착용하는 장비들은


헬멧 - 무기 - 방패 - 갑옷 - 허리띠 - 장갑 - 신발 - 목걸이 - 반지x2 로 되어 있으며


스킬잼을 착용할 홈이 있는 장비들은

헬멧 - 무기 - 방패 - 갑옷 - 장갑 - 신발


반지이며

각 장비 별로 홈 최대 갯수는


한손 무기와 방패는 3개



헬멧 - 장갑 - 신발 모두 4개


양손 무기와 갑옷에는 6개가 붙을 수 있습니다.

그리고 이 홈들이 2개 이상일땐 홈들 사이에


위 그림과 같이 이상한 연결 표시가 있을 수 있는데요.

이걸 POE에선 링크 라고 부르며 연결 된 홈들의 갯수로 아이템을 부릅니다.

예를 들어


이 한손 무기는 3개가 연결 되어 있으니 3링크 무기이며


이 장갑은 무려 4링크 장갑


이 갑옷은 홈이 6개나 있지만 링크는 두 개가 최대인 2링크 갑옷이며


이 양손 무기는 POE에서 최고로 꼽히는 6개의 홈이 모두 연결된 6링크 무기로 불립니다.

이 홈들을 연결해주는 링크의 기능은 바로 연결된 스킬 잼들간 패시브 옵션을 공유해주는 기능합니다.


스킬 잼은 이렇게 액티브 스킬 잼과 함께


패시브 스킬 잼 두 가지가 있는데 패시브 스킬은 위와 같이 연계가 되는 액티브 스킬들이 정해져 있습니다.

위의 폭발 덫을 예로 들면 폭발 덫 잼 하나만 착용한 뒤 사용하면


이렇게 한번에 한 개의 덫을 던지는 스킬을 사용하지만


폭발 덫과 연계가 가능한 이 다중 덫 보조 패시브 스킬잼을


녹색 잼들 간 링크가 있는 한 아이템에 모두 착용하면

폭발 덫 스킬은 다중 덫 패시브 스킬이 함께 적용되어


엄청난 스킬을 사용하게 됩니다. ^^

따라서 가장 많은 연계가 가능한 6링크 장비가 등급이나 옵션에 상관없이 매우 선호되며 육성에서도 필수로 꼽히고 있죠.


(같은 6홈 아이템이라도)


(6링크가 되는 순간 가격도 하늘과 땅 차이 ^^;;)

이제 시스템 설명도 거의 끝났네요.

다음편에 화폐랑 창고, 거래소만 이야기하고 본편으로 들어가겠습니다.

봐주셔서 감사합니다.!

패스오브엑자일 플레이 관련 전체 리스트
Share: