gdb로 orbslam 코드를 디버깅하려고 하는데, 파일 주소를 저장한 vector 컨테이너의 사이즈가 -11로 초기화된 상태인 거를 발견했다.
vector 구성요소 하나하나를 조회하는 디버깅을 하려면 다음과 같은 명령어를 쳐야한다.
pvector <vector_name>
혹은
print *(your_vector._M_impl._M_start)@your_vector_size
인데,
아래 것은 오류가 난다.
디버깅을 하며 왜그런지 확인하고, 내가 원하는 대로 벡터 구성요소를 확인해보자.
0. gdb 명령어로 실행파일이 디버깅 가능한 상태로 빌드해놓은 상태여야 한다(앞선 포스트 참고).
1. 디버깅 시작
2. main 함수(또는 원하는 지점)에 브레이킹 포인트 지정, 그리고 레이아웃을 보기 편하게 바꾼다.
b *main
layout src
3. 브레이킹 포인트가 main 시작점에 걸린 상태에서 r (run) arg1 arg2 arg3 ... 매개변수 자리에 인수를 입력해주며 디버깅을 실행한다. 그리고 n이나 s(참조 함수 안으로 디버깅)을 한다.
run ../../Vocabulary/ORBvoc.txt ./EuRoC.yaml ../../DataSets/EuRoC/MH01 ./EuRoC_TimeStamps/MH01.txt
run ../../Vocabulary/ORBvoc.txt ./ABKO_webcam.yaml ../../DataSets/ABKO_webcam ../../DataSets/ABKO_webcam/test/ABKO_timestamps.txt
run ../../Vocabulary/ORBvoc.txt ./ABKO_webcam.yaml ../../DataSets/ABKO_webcam ../../DataSets/ABKO_webcam/test/ABKO_timestamps.txt
gdb Optimized out 변수값 문제
변수값을 조회하는 p <변수값>을 입력하면 optimized out 을 출력해버린다. 근데, cout 선언문을 거치고 나니 $3 = 1 로 값을 출력한다. 정말 최적화라는걸 하는 거 같다.
undefined command: "pvector"
pvector <vector_name> 명령어가 원래 없는 거 같다.
아래 출처를 따라 실행했던 거였는데 조치가 필요해보인다.
http://www.yolinux.com/TUTORIALS/GDB-Commands.html
No symbol "vector_name" in current context.
p *(vstrImageFilenames._M_impl._M_start)@vstrImageFIlenames.size()
를 실행한 결과,
No symbol "vstrImageFIlenames" in current context. 라는 에러가 출력되었다.
위에서부터 반복된 Optimization level 문제를 해결하기 위해, orbslam에서 cmake invocation command가 들어있는 build.sh 를 수정해주었다.
(Before) line 39
cmake .. -DCMAKE_BUILD_TYPE=RELEASE
(After) line
cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_FLAGES_DEBUG="-g -O0" -DCMAKE_CXX_FLAGS_DEBUG="-g -O0"
수정한 결과물을 반영하기 위해 다시 make를 진행했다.
make를 하는 동안 예전 버전으로 그냥 더 진행을 해보았다
4. vstrImageFIlenames 출력 결과물
이중으로 된 vector 객체인 것으로 보인다. 이게 가능한건가?
info locals로 모든 로컬 변수를 출력하면서 벡터 내용을 확인할 수 있었다.
'건축 컴퓨터 비전 > ORB-SLAM3' 카테고리의 다른 글
slam 실행 전 libpango_display.so: cannot open shared object file: No such file or directory (0) | 2022.08.05 |
---|---|
ORB SLAM Custom data, debugging (0) | 2022.07.15 |
ORB-SLAM3 카메라 캘리브레이션2 (0) | 2022.07.08 |
ORB-SLAM3 카메라 캘리브레이션 (0) | 2022.07.06 |
ORB-SLAM3 설치(20.04) (0) | 2022.06.16 |