본문 바로가기

All250

Visual studio 디버거 덤프 파일 생성 개념 프로그램 실행 중 예외처리 되지 않은 오류나 크래쉬 등이 발생했을 때, 해당 시점의 프로그램 상태 정보를 담고 있는 .dmp 확장자를 가진 파일을 말한다. 덤프 파일은 그 시점에서의 변수, 메모리, 콜스택 등의 정보를 가지는데 이를 Visual studio에서 실행하면 디버거를 통해 디버깅이 가능하다. 덤프 파일은 시스템에 의해 자동으로 생성되는 것이 아니라 직접 프로그램 내에 코드를 작성해야 한다. 대략적인 원리 VS 디버거 동작 우선 VS에서 디버깅이 어떻게 수행 되는 것인지 알 필요가 있다. 디버거로 프로그램을 실행하면 중단점을 설정하여 변수 값을 확인하거나 다른 스택 프레임으로 이동하는 등의 동작을 할 수 있다. 프로그램을 실행한다는 것은 빌드를 통해 만들어낸 바이너리 파일을 실행한다는 것인.. 2023. 10. 8.
미리 컴파일 된 헤더 사용하기 개념 미리 컴파일 된 헤더를 사용하면 빌드 수행 시 걸리는 컴파일 시간을 줄일 수 있다. C/C++ 언어로 작성된 코드는 컴파일과 링크 과정을 통해 실행 가능한 프로그램으로 만들어진다. 헤더 파일은 소스 파일에 인클루드되고 컴파일은 소스 파일 단위로 수행된다. 만약 어떤 헤더를 포함하는 소스 파일이 수정되면 그 소스 파일은 다시 컴파일해야 한다. (헤더는 변하지 않았음에도) 헤더가 많은 내용을 담고 있다면 컴파일 하는 데 걸리는 시간은 낭비이다. 만약 헤더의 내용이 변경되지 않았을 경우 그냥 변경된 소스 부분만 컴파일할 수 있다면 좋을텐데, 이를 미리 컴파일 된 헤더가 가능하게 해준다. 대략적인 원리 어떤 헤더를 하나 정하고, 그 헤더에 여러 내용을 작성한다. 이 헤더에 작성된 내용과 이 헤더가 포함하고.. 2023. 10. 7.
sprintf 랩핑 버전 만들기 spirntf 함수는 사용자가 지정한 포맷 형태로 문자열을 만들어주는 함수이다. 이 함수를 랩핑하고 싶어서 만들다가 ...을 통해 받은 가변 인자 부분을 어떻게 sprintf에 넘겨줘야 할지 몰라서 찾아보았다. 그냥 sprintf에 넘기면 인자 부분이 쓰레기 값이 나왔다. 찾아 보니 sprintf가 아닌 vsprintf를 사용해야 한다. 해당 함수 버전도 wchar 버전, safe 버전 등 다양한 게 많기 때문에 필요한 것에 맞게 찾아 사용하면 된다. 나의 경우엔 다음의 문서를 참고하였다. https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l?view=.. 2023. 7. 9.
[윈도우즈 API 정복] 1. 윈도우즈 프로그래밍 Windows와 Windows API 다 알겠지만 Windows는 마이크로소프트에서 개발한 운영체제이다. 윈도우즈 이전엔 주로 MS-DOS(Disk Operating System)가 사용 되었으며, 가장 표면적인 차이점은 윈도우즈 OS는 사용자 입장에서 직관적인 GUI 환경의 운영체제라는 점이다. 운영체제는 응용 프로그램이 하드웨어 위에서 잘 동작할 수 있도록 도와주는 시스템 소프트웨어이다. 응용 프로그램이 디스크에 존재하는 파일을 읽고 싶다면 하드웨어에게 명령을 내려야 하는데, 이를 운영체제가 도와준다. 단순한 파일 읽기라도 내부적으론 많은 복잡한 과정(명령)을 거치게 되는데, 윈도우즈는 이러한 복잡한 명령 집합을 랩핑하여 간단한(상대적으로) 인터페이스를 구현해 놓았고, 우리는 이를 통해 파일을 쉽게 .. 2023. 5. 23.
dumpbin을 사용하여 .lib 파일 내의 함수 정보 얻기 라이브러리를 추가하고 어떤 클래스를 사용하는데 특정 멤버 함수에서만 LNK2019 에러가 떴다. 이 에러는 보통 함수의 선언과 정의가 뭔가 매칭되지 않을 때 뜨는 것으로 알고 있다. 특정 멤버 함수만 뜨기 때문에 프로젝트 세팅 문제는 아닌 것 같았다. 뭔가 인자 타입이 선언과 정의가 다른건가 의심하고 있었다. (아주 옛날 라이브러리고 beta 버전이라 써져 있었음) 그래서 혹시 lib 파일 내용을 볼 수 있는지 찾다가 dumpbin이라는 것을 이용해 lib 파일 내에 있는 함수 시그니처 정보를 볼수 있다는 것을 알았다. 그래서 아래 방법으로 확인해 보았는데 실제로 내가 가지고 있는 헤더에 선언된 함수의 인자랑 lib 파일 내의 인자랑 달랐고 헤더 수정하니 컴파일 잘된다. (문자열 타입이 상이했음) 사용법.. 2023. 4. 27.
Reliable UDP (RUDP)란? Reliable: 신뢰할 수 있는 TCP는 패킷 통신에 있어서 다음과 같은 특징 및 기능 제공 통해 신뢰성을 보장하는 프로토콜이다. 패킷 순서 보장: 송신한 순서대로 수신함을 보장 패킷 무결성 보장: 송신한 패킷과 수신한 패킷의 내용이 동일함을 보장 패킷 도착 보장: 송신 패킷은 꼭 상대에게 도착할 것을 보장(재전송 등을 통해 자체적으로) 혼잡 제어(congestion control): 패킷 송수신이 원활하게 발생할 수 없는 상황에 대한 자체적인 처리 흐름 제어(flow control): 혼잡 상황 혹은 수신측이 감당할 수 없는 양의 패킷 전송 등이 최대한 발생하지 않도록 패킷의 전송 흐름을 제어하는 기능 UDP는 위와 같은 기능을 제공하지 않는다. Reliable UDP는 신뢰될 수 있는 UDP 라는 .. 2023. 2. 6.