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를 하라는 건 다 알아야되잖아..
'Language & Framework & GIT > ROS2' 카테고리의 다른 글
[ROS2] DDS란? - 2 (37) | 2023.12.26 |
---|---|
[ROS2] DDS란? - 1 (32) | 2023.12.19 |
[ROS2] SequentialReader와 Reader의 차이가 뭘까? (70) | 2023.12.05 |
[ROS2] RQT에서 영상 재생이 안될 때 어떻게 해야할까? (74) | 2023.12.04 |
[ROS] rcutils? (63) | 2023.11.21 |
댓글