본문 바로가기

C,C++/Debugging things5

Visual studio 디버거 덤프 파일 생성 개념 프로그램 실행 중 예외처리 되지 않은 오류나 크래쉬 등이 발생했을 때, 해당 시점의 프로그램 상태 정보를 담고 있는 .dmp 확장자를 가진 파일을 말한다. 덤프 파일은 그 시점에서의 변수, 메모리, 콜스택 등의 정보를 가지는데 이를 Visual studio에서 실행하면 디버거를 통해 디버깅이 가능하다. 덤프 파일은 시스템에 의해 자동으로 생성되는 것이 아니라 직접 프로그램 내에 코드를 작성해야 한다. 대략적인 원리 VS 디버거 동작 우선 VS에서 디버깅이 어떻게 수행 되는 것인지 알 필요가 있다. 디버거로 프로그램을 실행하면 중단점을 설정하여 변수 값을 확인하거나 다른 스택 프레임으로 이동하는 등의 동작을 할 수 있다. 프로그램을 실행한다는 것은 빌드를 통해 만들어낸 바이너리 파일을 실행한다는 것인.. 2023. 10. 8.
dumpbin을 사용하여 .lib 파일 내의 함수 정보 얻기 라이브러리를 추가하고 어떤 클래스를 사용하는데 특정 멤버 함수에서만 LNK2019 에러가 떴다. 이 에러는 보통 함수의 선언과 정의가 뭔가 매칭되지 않을 때 뜨는 것으로 알고 있다. 특정 멤버 함수만 뜨기 때문에 프로젝트 세팅 문제는 아닌 것 같았다. 뭔가 인자 타입이 선언과 정의가 다른건가 의심하고 있었다. (아주 옛날 라이브러리고 beta 버전이라 써져 있었음) 그래서 혹시 lib 파일 내용을 볼 수 있는지 찾다가 dumpbin이라는 것을 이용해 lib 파일 내에 있는 함수 시그니처 정보를 볼수 있다는 것을 알았다. 그래서 아래 방법으로 확인해 보았는데 실제로 내가 가지고 있는 헤더에 선언된 함수의 인자랑 lib 파일 내의 인자랑 달랐고 헤더 수정하니 컴파일 잘된다. (문자열 타입이 상이했음) 사용법.. 2023. 4. 27.
윈도우 메모리 릭 디버깅 슬라이드셰어 https://www.slideshare.net/seao/ndc18-95258747 [NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 NDC 2018 서버야, 아프지마 - 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 www.slideshare.net 2021. 10. 4.
[C++] CRT 라이브러리로 디버깅 시 메모리 누수 찾기 메모리 동적 할당 후 해제를 따로 하지 않아도 에러가 발생하지 않기에 누수 발생 여부를 알기 어렵다. 이때, CRT 라이브러리를 이용하면 다음과 같이 디버깅 시 누수 지점을 쉽게 찾을 수 있다. Detectd memory leaks! 우선 다음과 같은 선언이 필요하다. #define _CRTDBG_MAP_ALLOC #include #define 문은 메모리 누수 결과를 더 자세히 보여주도록 하는 정의문이라고 하는데 나의 경우 결과가 동일했다. 실제로 더 자세히 보여주기 위해선 new 연산자를 추가 인자와 함께 매크로로 정의하여 몇 가지 정보를 더 출력하도록 해야했다. 그 방법은 잠시 후 소개하고, 결과가 동일해도 혹시 모르니 위와 같이 작성한다. 다음은 누수를 탐지하기 위한 함수들이다. 복잡해보일 수 있.. 2020. 2. 17.
[c++] Visual studio 2019 환경에서 디버깅 하기 / debugging, memory, disassemble, 디버그, 디버거 안녕하세요. 오늘은 VS2019 환경에서 디버깅 기능을 사용하는 방법에 대해 알아보겠습니다. 디버깅이란 프로그램 작성 중 발생한 에러를 찾고 고치는 과정을 말합니다. 개발자가 오류를 잡는데 도움을 주도록 보통 개발 툴마다 디버깅 기능을 지원하는데, 그중에서도 비쥬얼 스튜디오는 디버깅 기능이 뛰어나기로 유명합니다. 한 단계 한 단계 따라가며 VS의 디버깅 기능을 이용하다 보면 신기하기도 하고 한번 익혀두시면 많은 도움이 될 거라 생각합니다. 알아볼 것 기본적인 디버깅 방법 디버깅 중 메모리 영역 확인 (특정 주소에 어떤 값이 들었는지 눈으로 확인) 디버깅 중 고급언어로 작성된 소스코드를 저급 언어인 어셈블리어로 변환하여 보는 방법 (Disassemble) 목차 1. 중단점 체크 2. 디버깅 시작 2-1) .. 2019. 10. 15.