본문 바로가기

C,C++76

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.
dumpbin을 사용하여 .lib 파일 내의 함수 정보 얻기 라이브러리를 추가하고 어떤 클래스를 사용하는데 특정 멤버 함수에서만 LNK2019 에러가 떴다. 이 에러는 보통 함수의 선언과 정의가 뭔가 매칭되지 않을 때 뜨는 것으로 알고 있다. 특정 멤버 함수만 뜨기 때문에 프로젝트 세팅 문제는 아닌 것 같았다. 뭔가 인자 타입이 선언과 정의가 다른건가 의심하고 있었다. (아주 옛날 라이브러리고 beta 버전이라 써져 있었음) 그래서 혹시 lib 파일 내용을 볼 수 있는지 찾다가 dumpbin이라는 것을 이용해 lib 파일 내에 있는 함수 시그니처 정보를 볼수 있다는 것을 알았다. 그래서 아래 방법으로 확인해 보았는데 실제로 내가 가지고 있는 헤더에 선언된 함수의 인자랑 lib 파일 내의 인자랑 달랐고 헤더 수정하니 컴파일 잘된다. (문자열 타입이 상이했음) 사용법.. 2023. 4. 27.
Unity Build(유니티 빌드)란? C/C++에서 유니티 빌드라는 시스템이 있다. 여기서 유니티는 유니티 엔진의 유니티가 아니다. 여기서 유니티는 하나로 뭉쳐서 빌드한다는 뜻이다. C/C++과 같이 소스 파일이 헤더 파일을 포함하는 시스템의 경우 컴파일이 오래 걸릴 수 있다는 특징이 있다. 이러한 시스템의 빌드는 컴파일과 링크 과정으로 나뉘는데, 컴파일은 소스 파일(.cpp) 단위로 컴파일이 된다. 그런데 각 소스 파일들은 보통 헤더 파일을 include 한다. include는 단순히 컴파일 전에 컴파일러가 헤더 파일의 내용을 그대로 소스 파일에 복사하는 역할이다. 만약 10개의 소스 파일이 각각 동일한 헤더 파일을 모두 include하고 있다면 동일한 헤더의 내용이 10개의 소스 파일에 모두 복사가 되고, 10개의 소스 파일이 각자 컴파.. 2021. 11. 14.
윈도우 메모리 릭 디버깅 슬라이드셰어 https://www.slideshare.net/seao/ndc18-95258747 [NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 NDC 2018 서버야, 아프지마 - 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 www.slideshare.net 2021. 10. 4.