본문 바로가기

전체 글

(173)
Handle Leak 디버깅 Go 버튼 Break 버튼 0:000> !htrace -enable htrace 활성화 - 윈도우가 모든 핸들의 생성과 소멸에 관련된 호출에 대해서 기록하게 된다. Go 버튼 대기 또는 Handle Leak 상황 재현 Break 버튼 0:000> !htrace -diff !htrace -diff - 동일한 핸들 값에 OPEN만 있고 CLOSE가 없는 것들을 출력해준다. 이후 출력되는 Call Stack으로 Handle Leak 원인 추적 https://learn.microsoft.com/ko-kr/windows-hardware/drivers/debugger/ WinDbg 설치 - Windows drivers Windows 디버거 및 WinDbg 설치에 대한 개요는 여기에서 시작합니다. learn.micr..
C++이 header, cpp 파일로 나누는 이유 Declaration : header Definition : cpp '정의' 부분인 cpp파일에 header를 복사 붙여넣기로 선언부를 가져오는 형태이다. '선언' 부분인 header에 '정의' 내용까지 모두 포함시킬 수 있는데 왜 나눌까? 이를 알기 위해서는 컴파일 프로세스를 이해해야 한다. a.cpp 파일은 a.h를 포함 b.cpp 파일은 a.h, b.h를 포함 위와 같은 상황일 때 cpp파일은 각각의 오브젝트 파일을 만들어 낸다. b.obj 파일을 만들 때 a의 cpp파일인 '정의' 부분 없이 header파일인 '선언'만 가지고도 b.obj 파일을 만들 수 있다. b.obj 파일은 a객체를 사용한다라는 정보만 담기게 된다. 코드가 동작하는데 b.obj에도 a 객체를 사용하기 때문에, 분명히 a의 정..
commit --amend, rebase -i로 수정 시, git push --force 할 경우 'You are not allowed to force push code to a protected branch on this project.' 에러 발생 시 조치 GitLab에서 'Allowed to force push'를 허용해줘야 한다. Project > Settings > Repository > Protected branches Allowed to force push를 허용
과거 커밋들을 수정, 삭제, 병합, 분할하는 rebase -i git rebase -i 명령어 설명 p, pick 커밋 그대로 두기 r, reword 커밋 메시지 변경 e, edit 수정을 위해 정지 d, drop 커밋 삭제 s, squash 이전 커밋에 합치기 Sourcetree에서 사용하기 수정하려는 커밋들의 부모 커밋에서 Rebase children of interactively... 버튼을 클릭 Edit Message : 커밋 메시지 변경 Squash with previous : 이전 커밋에 합치기 Delete : 커밋 삭제 ↓↑ 버튼 : 커밋 위치 위, 아래 이동
커밋을 수정하는 commit --amend commit --amend가 필요한 상황 커밋 메시지를 바꾸고 싶을 때. 이전 커밋의 파일을 수정하고 싶을 때. 이전 커밋에 파일을 추가하고 싶을 때. 커밋의 불변 속성 커밋을 수정해도 실제로는 새로운 커밋이 하나 생성되어 바뀌는 원리로 수행된다. 커밋 메시지 변경 아래 명령어로 에디터를 열어 커밋 메시지를 변경한다. git commit --amend 커밋 메시지 한 줄로 변경 git commit --amend -m '원하는 메시지' 원격에 저장된 커밋을 수정하는 상황 커밋을 수정해도 실제 새로운 커밋이 생기는 것이기에 일반적으로 push는 불가능하다. 원격 저장소인 'origin'과 로컬 저장소인 'main' 브랜치의 커밋이 서로 달라졌기 때문에 충돌이 일어난다. 이 경우 강제 push 명령어를 통해 ..
브랜치를 다른 브랜치에 이어붙이는 rebase 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합한 브랜치를 합치는 방식이다. 'branch' 브랜치를 'main' 브랜치로 rebase하는 방법 1. 'branch' 브랜치로 이동한다. 2. rebase 명령어 입력. git rebase main 3. 'main' 브랜치로 이동 후 'branch'의 시점으로 fast-forward. git merge branch 4. 'branch' 브랜치를 삭제한다. rebase 주의 사항 원격 저장소에 push한 브랜치는 rebase하지 않는 것이 원칙이다. 가급적 rebase는 아직 원격에 존재하지 않는 로컬의 브랜치들에만 적용하자. 그래도 원격 저장소에 push한 브랜치에 rebase를 적용한다면... rebase는 이력을 조작하는 행위기 때문에, 일반 pu..
Markdown 정리 https://youtu.be/kMEb_BzyUqk 1. Heading 실습 Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6 Paragraph 작성 방법 # Heading 1 ## Heading 2 ### Heading 3 #### Heading 4 ##### Heading 5 ###### Heading 6 Paragraph 2. Line 실습 작성 방법 --- 3. Text attributes 실습 This is the bold text and this is the italic text and let's do strikethrough . 작성 방법 This is the **bold** text and this is the _italic_ tex..
C++에서 std::to_string으로 int를 string으로 변환, c_str()로 string에서 const char* 반환 1. 상황 GStreamer를 사용중에 GObject의 property를 설정할 필요가 있었다. property를 설정하기 위해서는 g_object_set()의 두 번째 파라미터로 property이름을 const gchar* 형태로 넘겨줘야한다. 여기서 property 이름을 원하는 조건에 맞는 string값으로 조합할 필요가 있었다. 이때 C++로 string을 조작한 방법을 복습하기 위해 정리한다. 2. 사용했던 string 조작 방법 1) std::to_string으로 int를 string으로 변환 2) '+' 연산자로 string 합치기 3) c_str()로 string에서 const char* 반환 3. 예제 코드 작성 #include #include void MakeStringAndShow()..