Eclipse CDT で log4cppのサンプルコードをデバッグしてみる

## 環境
CentOS Linux release 7.0.1406 (Core)
Eclipse Version: Neon.3 Release (4.6.3)

・CentOSは、Dockerイメージ「centosjp」を元にしています。
　Dockerイメージ「centosjp」の作り方は、[Window10に日本語対応CentOS7のdockerコンテナを作ってみた](https://qiita.com/0ashina0/items/f8b960e822a40a6a2eed)を参照。

・Eclipseは、「centosjp」をもとに、以下の方法でインストールしています。
　[ネットにつながっていないCentOSにEclipse CDTとSubversionのプラグインを入れてみた。](https://qiita.com/0ashina0/items/313bdece645c3e9b8ede)

・log4cppは、以下の方法でインストールしています。
　[log4cppをCentOSにインストールする](https://qiita.com/0ashina0/items/80e23329eae958d828c6)

・デバッグボタンを押すと、```Operation not permitted.```のエラーメッセージが出て実行できません。以下のように/proc/sys/kernel/yama/ptrace_scopeを書き換える必要がありました。

```
echo 0 > /proc/sys/kernel/yama/ptrace_scope
```

そのためには、--privileged オプション付きでDockerコンテナを実行させる必要があります。

```
docker run --privileged -ti  [コンテナID]  /bin/bash
```

# 1. プロジェクトを作成する。

C++ Project を選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/939f141d-c2af-deb3-c9b8-27bb2f83b8eb.png)

Project name、Project Type、Toolchainsを入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/1975af97-b410-c59e-cdf0-6af2f1fd4cc5.png)

# 2. ソースコードフォルダを作成する。
 (必須ではない)

File -> New -> Source Folderメニュ選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/55b38c88-33b0-8f72-c316-9b830c85b98b.png)

Folder名に「src」を設定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/ff7303b7-e094-29b9-d422-925cb89f7ea4.png)

# 3. ファイルをインポートする。

インポートしたいフォルダ上で、右メニュ -> Import
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/099aa16a-ccdf-19fa-d04e-6750a4f2f9f3.png)

General -> File System
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/88ac0f01-9e42-1253-2e1f-78aef3b8d315.png)

Importしたいファイルと格納先を選択　サンプルコードとpropertyファイルをImportする
サンプルコード：testPropertyConfig.cpp
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/12b294ba-2474-3e83-565f-d2db5139380d.png)

propertyファイル：testConfig.log4cpp.properties
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/d2b6fa08-632b-9bfb-e953-9b38163979f1.png)

ソースTreeに追加される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/68ff4a1d-cd22-6e29-33dd-10aee9147f73.png)


# 4. インクルードパスを通す。

Project -> Propertis メニュ選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/81d20c68-8878-9691-f8df-130f2ae76997.png)

C/C++ General -> Paths and Symbols メニュ選択。Includesタブで、Addボタンをクリックし、log4cppのInclude Pathを入力。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/f7e73c2f-43c6-b180-8008-c48cc434e638.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/98189905-dd03-145f-b1a6-aebaed289501.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/80ff262a-602b-c9bc-bd18-d70f5a59cd97.png)

# 5. ライブラリパスを通す。

Libraryタブで、Addボタンをクリックし、log4cppのLibrary Pathを入力。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/1b50b06c-4183-f7c4-e401-9fb966a09c0f.png)

pthreadののLibrary Pathを入力。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/db16d266-1fa1-0b0d-79ff-e519853a307c.png)

Librariesタブで、Addボタンをクリックし、log4cppのLibrary Fileを入力。ファイル名の頭のlibと拡張子は削除する。（liblog4cpp.so -> log4cpp)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/51e5f1c7-cac4-2047-87fd-5bb87faa6c4f.png)

PthreadのLibrary Fileを入力。（libpthread.so -> pthread)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/af2dff70-bf1b-738f-f87b-5541a635f338.png)

# 6. ビルドする。

ビルドのアイコンをクリックする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/51e57b18-b30c-4cad-97d0-13bd85022c8b.png)

# 7. ブレークポイントをセットする。

止めたい箇所で右メニュを開き、Add Breakpointメニュ選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/b192949e-ba5b-62b5-73f5-9d72b14ba5eb.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/005c3c9b-10da-5607-e5e6-6c44b58cd7e8.png)

Breakpointが表示される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/9d5d5572-35de-109b-bce4-70666735cf54.png)

# 8. デバッグする。

デバッグボタンを押す。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/6833358b-0ef0-d268-be94-d061bdb67567.png)

コンソールにエラーが表示される場合は、環境変数を設定する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/4f2d541d-8e6b-1cfa-a6f7-b1dd1d295cc5.png)

```
/root/workspace45/sample/Debug/sample: error while loading shared libraries: liblog4cpp.so.5: cannot open shared object file: No such file or directory 
```

環境変数 LD_LIBRARY_PATHにエラーとなった```liblog4cpp.so.5```のパスを設定する

Run -> Debug Configurations メニュ選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/5130e75d-a160-46c8-d47c-cfda5e5c9356.png)

Enviromentタブで、環境変数を設定する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/16e960ce-ca5a-c0bf-7398-b2f480141f02.png)

Debug perspectiveを開くかダイアログが表示されるので、```yes```をクリックする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/a181497a-1dc8-f9b9-e795-67980ff27a5a.png)

Breakpointで停止しているのが確認できる。Step Overアイコンをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/228b272d-c089-8d01-2dd8-51fcac90f4f0.png)

１行進んで停止しているのが確認できる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/c43272d6-945a-62b9-fc2a-8ddb10a0fd62.png)

Resumeアイコンをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/0511b205-0edc-c050-36d8-bdfe326d3734.png)

コンソールに実行結果が出力されているのが確認できる。プログラムが終了しているのも確認できる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/f13041db-3d7f-86d1-cf39-3bc8164877be.png)

# 9. makefileを確認する

「5. ライブラリパスを通す。」で設定した内容が確認できる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/1ca431de-3a84-1e91-cbab-810a9591c1b8.png)

「4. インクルードパスを通す。」で設定した内容が確認できる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214982/c6812ca5-8ace-ede0-2d62-b54472d20ea8.png)