본문 바로가기
Language & Framework & GIT/ROS2

[ROS2] Segmentation Fault 발생 시 디버깅 과정

by veganwithbacon 2023. 12. 11.
반응형

ros 환경에서 코딩을 하다보니, 프레임워크를 써서 빌드하고 run할 때보다는 불편한 점이 더 많은 것 같다.

그렇지만 프레임워크를 사용하지 않을 때는 너무 무기력해질 수도 있다는 생각에  현상황에서의 경험이 득이 될건 더 많은 것 같긴 하다. spring 사용 때는 프레임워크에서 알아서 잡아내줬으니..

 

 

1. Core Dump 설정 활성화

- Segmentation Fault가 발생 시, 코어 덤프 파일을 생성되도록 설정

  코어 덤프는 프로그램이 비정상 종료 시, 메모리 상태를 포함하는 파일이다.

 

- 코어 덤프 설정 명령

ulimit -c unlimited

 

2. ROS 2 디버그 빌드

- ROS2를 디버그 빌드로 빌드해 추가적인 디버깅 정보를 얻을 수 있다

- 빌드 시 'CMAKE_BUILD_TYPE'를 'Debug'로 설정

colcon build --cmake-args -DCAMKE_BUILD_TYPE=Debug

 

3. GDB를 사용한 디버깅

- 디버그 빌드로 빌드된 노드를 GDB(GNU Debugger)로 실행해 Segmentation fault를 추적

gdb -ex run --args ros2 run <your_package> <your_executable>

 

- GDB에서 Segmentation Fault가 발생 시 'backtrace' 명령을 사용해 stack trace를 확인

(gdb) backtrace

 

4. Valgrind 사용 (선택 사항)

- valgrind는 메모리 누수 및 다른 메모리 관련 문제를 검사하는데 유용

valgrind ros2 run <your_package> <your_executable>

 

5. ROS2 도구 사용

ROS2는 'rclcpp' 노드를 디버깅 도구가 있다는 것만 알고, 어떤 것을 통해 디버깅을 진행해야하는 지는 알아봐야함.

해당 방법은 좀 더 조사 후에 링크 태그나 내용 업데이트를 진행함

 

 

6. ROS2 버전 확인

ros2 버전에 따라서 이미 디버깅이 진행된 경우도 있기 때문에, 업데이트는 꾸준히 하자.

 

 

 

막상 이렇게 조사하고 하나만 파면 다 해결될 줄 알았는데,,

core dump를 하려면 gdb를 하라는 건 다 알아야되잖아..

반응형

댓글