디버깅
Posts
24 posts[리눅스][디버깅] GDB로 깨진 콜 스택 복원하기(공유 라이브러리 로딩하는 방법)
리눅스 프로젝트를 개발하면 코어덤프(coredump)를 열어서 크래시가 발생한 원인을 분석할 때가 많습니다.많은 개발자 분들이 코어덤프를 열어서 크래시가 발생한 원인을 분석하죠. 코어덤프를 열어 gdb를 사용해 디버깅할 때 가장 짜증나는 것 중 하나는 공유 라이브러리를 제대로 로딩하지 못해콜 스택이 보이지 않을 때 입니다. 이번에는 코어덤프를 로딩할 때 필요한 정보 중 하나인 공유 라이브러리의 정보(패스/이름)을 확인하는 방법을 소개합니다. 깨진 콜 스택 확인하기 먼저 콜 스택을 보겠습니다. (gdb) bt#0 0x0000007f7def1808 in __glibc_raise (sig=sig@entry=6) at /usr/glibc/raise.c:1354#1 0x0000007f7def2d80 in
[리눅스커널] 커널 디버깅과 코드 학습: 디버깅과 코드 학습 능력
디버깅과 코드 학습 능력 디버깅하면서 리눅스 커널 코드를 함께 분석하면 다음과 같은 정보를 더 얻을 수 있습니다. 분석 대상 코드가 동작하는 콜스택 함수가 실행될 때 변경되는 자료구조 함수가 실행되는 빈도와 실행 시각 분석 대상 코드를 실행하는 프로세스 대부분 리눅스 커널을 공부할 때는 커널 소스코드를 열어 봅니다. 코드를 이해하는 능력은 리눅스 개발자의 기본 소양이므로 소스를 이해하는 능력은 중요합니다. 하지만 소스코드를 분석하면 실행 흐름을 보는 시야가 좁아집니다. 그래서 코드 분석과 함께 함수 실행 흐름과 실행 빈도를 알 필요가 있습니다. 커널 소스코드만 분석한 분이 있다고 가정해 봅시다. 또 다른 분은 커널 디버깅과 함께 커널 코드를 함께 분석했습니다. 둘 중에서 누가 더 빨리 커널
[Python] sh 쉘 스크립트 디버깅
리눅스에서 쉘 스크립트를 이용하여 많은 작업을 하고는 합니다.갑자기 이런 쉘 스크립트가 복잡하고 굉장히 크다고 가정하고디버깅을 어떻게 하면 좋을까 여러번 생각해 본 적이 있습니다. 그런데 보통 다른 최신의 프로그래밍 IDE (예, PyCharm, Visual Studio 등)와 같은에서의 디버깅과 같은 것을 쉘에서 지원해주면 얼마나 좋을까 하는 생각이 들었지만 지원해 주지는 않습니다. 물론 '-x' 옵션을 sh (bash 등)에 주어 해당 내용을 에코시켜디버깅아닌 디버깅이라 부르고는 하지만 이것은 일반적인디버깅이라 할 수 없지요. 암튼 필요에 따라 고민을 하다, 파이썬으로 접근을 해 보았습니다. 우선 다음과 같은 세 개의 Shell Script가 있습니다. const.sh===============
[리눅스커널] 크래시 유틸리티: files -p '아이노드 주소' + files -d '덴트리 주소' 디버깅
크래시 유틸리티는 다양한 메모리 및 파일 시스템 디버깅 기능을 제공합니다.그 중에 유용한 기능 중 하나를 소개합니다. * files -p '아이노드 주소' 먼저 다음 명령어를 입력해 오픈된 파일에 대한 파일 디스크립터, 아이노드 그리고 덴트리를 확인 합니다. * files crash> files 1664PID: 1664 TASK: dc270000 CPU: 1 COMMAND: "Chrome-proc.anim"ROOT: / CWD: / FD FILE DENTRY INODE TYPE PATH 0 de4d8200 e1a33ab0 e0ce8dd8 CHR /dev/null 1 de4d8200 e1a33ab0 e0ce



