본문 바로가기

GDB3

daemon에 gdb로 붙는 두가지 방법(pid, 직접실행) Daemon 디버깅방법gdb를 사용하여 데몬(daemon)을 디버깅하는 방법입니다. 이미 실행 중인 데몬에 gdb를 붙이는 방법이미 실행 중인 데몬 프로세스에 gdb를 붙이는 방법입니다.데몬의 PID(프로세스 ID) 확인: 먼저 디버깅하려는 데몬의 프로세스 ID를 알아야 합니다.ps, pgrep 명령어 등을 사용해 PID를 확인할 수 있습니다.ps -ef | grep your-daemon-name gdb로 프로세스에 연결: 확인한 PID를 이용해 gdb를 실행합니다. 이렇게 하면 실행 중인 프로세스에 gdb가 연결됩니다. 이후 일반적인 gdb 명령어를 사용해 디버깅할 수 있습니다.gdb -p 데몬을 gdb를 통해 직접 실행하는 방법데몬이 실행되기 전에 gdb를 통해 디버깅하는 방법입니다.데몬의 실행 파.. 2024. 8. 23.
Linux Heap Memory 영역 해제(진짜 해제) Heap Memory를 사용하여 new, delete를 모두 다 했다. 하지만 stl을 사용하는 부분에 넣어왔을 때는 프로세스에서 메모리가 그대로 사용되고, 줄어들지 않았다. OS가 반환하지 않는 것으로 보이는데, 코드상으로 정확히 메모리 해제를 했기 때문에 코드상 문제는 없어보였다. 그럼 코드상 leak은 아닌데 캐시하고 있는건가를 보기 위해 해당 사이즈만큼 다시 new을 했을 때를 보았다. 결과는 추가적으로 메모리가 늘어나지 않았다. 이에 따라 stl에서 메모리를 물고 있는 것처럼 보였다. 이걸 OS가 반환해주지 않는 건지 stl 에서 물고 있는건지 모르겠다. 그러던 중 malloc_trim 함수를 찾았다. 이 함수는 코드상 해제했지만, 프로세스에서 잡고 있는 메모리를 free memory로 돌려준다.. 2019. 10. 23.
gdb 내용 출력방법(batch) 코어덤프가 많이 남아있는 상황에서 디버깅을 할 때 난감할 것이다. 이유는 코어덤프 종류가 하나인가 여러개인가부터 파악하기에 너무 양이 많기 때문이다. 코어덤프들의 bt(backtrace)를 모두 출력하면 같은 녀석인지 아닌지 바로 판별할 수 있을 것이다. 이에 gdb 내용을 모두 출력하는 방법을 소개한다. gdb 는 기본적으로 코어덤프 파일과 함께 해당 binary를 인자로 넣어주면 된다. ex) gdb -c coredump_file test_bin /var/tmp/coredump/ 폴더에 아래와 같이 5개의 파일이 있다고 가정한다. core.1 core.2 core.3 core.4 core.5 하나씩 보려면 아래와 같이 명령어를 쳐야한다. gdb -c core.1 test_bin gdb -c core... 2019. 10. 17.
반응형