「SLAM入門」のプログラムをEclipseでデバッグする

##この記事の目的

友納先生のSLAM解説本「SLAM入門」のコードについて、デバッグモードで実行する手順のまとめです。
手を動かしながらSLAMを理解できる本で、[ソースコード](https://github.com/furo-org/LittleSLAM)に対して非常に丁寧な解説がついており、基本的な部分はこれだけ読めば理解できます。
一方、実行途中でどのように変数の値が変化しているのか、中身が気になってきます。

デバッグ設定でプロジェクトを実行している例がなかったので、
Eclipseとお友達になることも兼ねて作業したメモとして残します。

## 実行環境

* Ubuntu 16.04
* Eclipse Photon 

コードとは別に配布されているデータセットは、書籍と同様にLittleSLAM/datasetへ格納しています。

## EclipseでDebugするまでの手順
### CMakelist.txtの編集
公開されているリポジトリではReleaseビルドするためのCMakelist.txtになっており、デバッグシンボルが入りません。
下記のように変更を加え、引数からデバッグ用プロジェクトを生成できるようにします。
[こちら](https://www.slideshare.net/hashimom/ccmakeeclipse)を参考にしました。

```
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c545275..f8b2bfe 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,10 @@ if(UNIX)
   endif()
 endif()
 
-SET(CMAKE_BUILD_TYPE "Release")
+if(NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE "Release")
+endif(NOT CMAKE_BUILD_TYPE)
+set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE})
 
 add_subdirectory(cui cui)
 add_subdirectory(framework framework)
```

### Eclipse プロジェクトの生成
上記でデバッグシンボルを入れるMakefileを生成してくれるようになったので、
これをつかってeclipseのプロジェクトを作ります。またしても上記スライドを参考に、下記のように行います。

```
cd {your-workspace}/LittleSLAM
mkdir work; cd work
cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUID_TYPE=Debug ../
```

### Eclipse プロジェクト読み込み
作成したEclipseプロジェクトを読み込みます。
[File]-[Open Projects from File System...]を選択
[Directory]をクリックし、下記のような形でプロジェクトのディレクトリ (LittleSLAM)を選択
![Screenshot from 2018-07-06 14-17-06.png](https://qiita-image-store.s3.amazonaws.com/0/89902/02fcb0cc-d1ee-a5ee-c320-aaefbe1aeb77.png)

[Finish]をクリック

### ビルドしてみる
とりあえずビルドできるか確認してみます。
 Project Explorerの<LittleSLAM-Debug@work>で右クリック - [Build Project]

以下のような内容がコンソールに出力され、ビルドが終わります。

```
14:23:02 **** Build of project LittleSLAM-Debug@work ****
/usr/bin/make -j4 all 
/usr/bin/cmake -H/home/<usrname>/eclipse-workspace/LittleSLAM -B/home/<usrname>/eclipse-workspace/LittleSLAM/work --check-build-system CMakeFiles/Makefile.cmake 
･･･中略･･･
/usr/bin/cmake -E cmake_progress_start /home/<usrname>/eclipse-workspace/LittleSLAM/work/CMakeFiles 0

14:23:50 Build Finished. 0 errors, 1 warnings. (took 47s.152ms)
``` 

### ブレークポイント設定
適当なところにブレークポイントを仕込んでおきます。
とりあえず、<LittleSLAM>プロジェクトのcui/main.cppに入れてみます。
![Screenshot from 2018-07-06 14-31-06.png](https://qiita-image-store.s3.amazonaws.com/0/89902/cc03f772-bee1-9a3a-1e30-ad0c2286545f.png)


### Debug実行方法の指定と実行
さて、これでEclipseをつかってDebugシンボル入りの実行ファイルを生成できるようになりました。
あとはどのような構成で実行するか指定します。
1. Project Explorerの<LittleSLAM-Debug@work>で右クリック - [Debug As] - [Debug Configurations...]を選択
2. [C/C++ Application]を選択し、[New Launch Configuration]をクリック
こんな感じです。
![Screenshot from 2018-07-06 14-02-08.png](https://qiita-image-store.s3.amazonaws.com/0/89902/4f54dda2-fa34-52ce-f21d-f4daf0594055.png)
![Screenshot from 2018-07-06 14-05-07.png](https://qiita-image-store.s3.amazonaws.com/0/89902/a7970238-31b4-f50c-6c01-a4db134d593e.png)
[Apply]をクリックして設定を適用します。
ここまでできたら、[Debug]をクリックして実行

![Screenshot from 2018-07-06 14-29-21.png](https://qiita-image-store.s3.amazonaws.com/0/89902/9f7f2a4c-f205-95f0-ae4a-3b3d74471927.png)
いつもどおりmain関数の開始時にHaltがかかるので三角ボタンで続行すると、こんな感じで実行できます。
変数の中身が見れてめでたしめでたし。

※実行速度は圧倒的に遅くなりますが、しょうがないというところで。

### 参考
* https://github.com/furo-org/LittleSLAM
* https://www.ibm.com/support/knowledgecenter/ja/SSQ2R2_9.0.1/org.eclipse.cdt.doc.user/getting_started/cdt_w_import.htm
* https://www.slideshare.net/hashimom/ccmakeeclipse