VS2015でRaspberryPiデバッグ

Raspberry Piでこれ↓をやってみました。半分くらいおんなじです。
- [Visual Studio 2015で、LinuxのHelloWorldデバッグ(MIDebugEngine使用)](http://qiita.com/mt08/items/cb2ca56ef86ba05c4a59)
- [Visual Studio 2015 へ MIEngineのインストール](http://qiita.com/mt08/items/4a71bed86bdd26bf7941)
- こんなかんじ。 `/lib/arm-linux-gnueabihf/libc.so.6`とかでてます。
![dd3.png](https://qiita-image-store.s3.amazonaws.com/0/75594/da061641-a8ee-1bbc-f4d6-2938476e13bc.png)


## 準備
### RaspberryPi側
- Raspbian Jessie (2015-09-24)使用
- `rpi-update` とか 適当に
- `openssh-server` はデフォで有効
- sambaのインストールと設定をする 

#### samba 簡単設定 (セキュリティが...)
 - インストール `sudo apt-get install samba`
 -  設定 `sudo nano /etc/samba/smb.conf`<br>
ファイルの最後に以下を追加

```
[pi]
path = /home/pi
read only = No
guest ok = Yes
force user = pi
```
 - 保存: `CTRL+O [Enter] CTRL+X`
 - サービス restart: `sudo service smbd restart`
 - Windowsのエクスプローラから、`\\raspberrypi\pi` を開いてみる。`/home/pi`がみれる

### Windows
- Visual Studio 2015
- MIDebugEngine (関連記事 : [Visual Studio 2015 へ MIEngineのインストール](http://qiita.com/mt08/items/4a71bed86bdd26bf7941) )
- PuTTY 
- Raspberry piの`/home/pi`を `J:\`にマウント
 - エクスプローラで、`\\raspberrypi` を開く
 - `pi` フォルダで、右クリック、`ネットワークドライブの割り当て(M)...`
![dd.png](https://qiita-image-store.s3.amazonaws.com/0/75594/524313e9-502e-23f8-b99a-0a7bb956aacb.png)


#### `PUTTYGEN.EXE`で鍵生成
1. SSH-2 RSA , 2048bitで [Generate]ボタンを押して、ウィンドウの上でマウスをぐりぐり動かす
2. `[Save private key]`で、パスフレーズなしでいいかの確認は、`[はい(Y)]`で、適当に名前を付けて、保存。ほかの人には秘密だよ！
3. PUTTYGEN.EXEはまだ **閉じない** (閉じちゃったら、`[Load]`すればいい)
4. PuTTYでRaspberry Piにログイン。ユーザpi、パスraspberry
5. `mkdir .ssh; chmod 700 .ssh; touch .ssh/authorized_keys; chmod 600  .ssh/authorized_keys`
6. PUTTYGENから、`Public key for pasting into OpenSSH authorized_keys file:`の下の枠のテキストをコピー。
7. `cat >> .ssh/authorized_keys` として、ペースト。`Enter`おして、`CTRL+D`

```text:raspberrypi-console
pi@raspberrypi ~ $ mkdir .ssh; chmod 700 .ssh; touch .ssh/authorized_keys; chmod 600  .ssh/authorized_keys
pi@raspberrypi ~ $ cat >> .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc...(省略)..TF6yiExpovv3rr5byxxwptmOYQ== rsa-key-20151002
pi@raspberrypi ~ $
```
![dd2.png](https://qiita-image-store.s3.amazonaws.com/0/75594/c07bdfd1-048e-c6ad-7865-f5d28b9bd453.png)

#### Windowsから、Plink.exeにて接続確認
```text:Windows-cmd.exe
C:\Tools\PuTTY\PLINK.EXE -i id_rsa-2048_20151002.ppk pi@raspberrypi echo Hello World !
Hello World !
```
- パスなしで入れましたね！



---
## あとは [Visual Studio 2015で、LinuxのHelloWorldデバッグ(MIDebugEngine使用)](http://qiita.com/mt08/items/cb2ca56ef86ba05c4a59)と同様にすすめましょう。

### プロジェクト、ファイル作成
- 1. 空ファイルだけ作って。

```bash:raspberrypi-console
pi@raspberrypi ~ $ cd
pi@raspberrypi ~ $ mkdir HelloWorld
pi@raspberrypi ~ $ touch HelloWorld/HelloWorld.cpp

```
- 2.  VS起動、File > New > Project From Existing Code...
 - Visual C++ [Next]
 - Project file location: `J:\HelloWorld`
 - Project name: `HelloWorld`
 - で [Next] 3.とりあえず..
 - Use Visual Studio で、
 - `[Console application project]`
 - で [Next] 
- 3. HelloWorld.cpp編集

```cpp:HelloWorld.cpp
#include <cstdio>
int add(int x, int y)
{
        return x + y;
}
int main()
{
        int a = 5;
        int b = 4;
        int c = add(a, b);
        std::printf("Hello World %d\n", c);
        return 0;
}
```
- 4. 適当なとこに、Breakpointおいて、[F5]おして、通常動作するか確認。

### Raspberry pi上でビルド
- 1. ファイル確認

```shell-session:raspberrypi-console
pi@raspberrypi ~/HelloWorld $ cd
pi@raspberrypi ~ $ cd
pi@raspberrypi ~ $ cd ~/HelloWorld/
pi@raspberrypi ~/HelloWorld $ ls -1
Debug
HelloWorld.cpp
HelloWorld.sln
HelloWorld.vcxproj
HelloWorld.vcxproj.filters
pi@raspberrypi ~/HelloWorld $
```
- 2. ビルド、実行

```shell-session:raspberrypi-console
pi@raspberrypi ~/HelloWorld $ gcc -o HelloWorld HelloWorld.cpp -g -O0
pi@raspberrypi ~/HelloWorld $ ls -1
Debug
HelloWorld
HelloWorld.cpp
HelloWorld.sln
HelloWorld.vcxproj
HelloWorld.vcxproj.filters
pi@raspberrypi ~/HelloWorld $ ./HelloWorld
Hello World 9
pi@raspberrypi ~/HelloWorld $
```

### Windowsのコマンドラインから、Plinkつかって、RaspberryPiのファイルをビルド
```text:windows-console
C:\Tools\PuTTY\PLINK.EXE -i J:\id_rsa-2048_20151002.ppk pi@raspberrypi cd HelloWorld;gcc -o HelloWorld HelloWorld.cpp -g -O0; ./HelloWorld

Hello World 9
```
Makefile 書けば、make一発ですな。

## VisualStudio2015からデバッグ
### MIDebugEngineへのオプションファイルを準備
- Plinkへのパスとか、
- ppkへのパスとか、<br>
うまく編集する。

```xml:/home/pi/HelloWorld/LaunchOptionRaspberryPi.xml
<PipeLaunchOptions xmlns="http://schemas.microsoft.com/vstudio/MDDDebuggerOptions/2014"
    PipePath="C:\Tools\PuTTY\PLINK.EXE"
    PipeArguments="-i C:\Users\User01\.ssh\id_rsa-2048_20151002.ppk pi@raspberrypi -batch -t gdb --interpreter=mi"
    ExePath="/home/pi/HelloWorld/HelloWorld"
    ExeArguments=""
    TargetArchitecture="X64"
    WorkingDirectory="/home/pi/HelloWorld"
    AdditionalSOLibSearchPath="">
</PipeLaunchOptions>
```

### Win:VS2015から
1. HelloWorld.cppをひらいて、ブレークポイントをはる。
2. View > Other Windows > Command Window (Ctrl+Alt+A)でコマンドウインドウを開く(下)
3. Command Windowに`Debug.MIDebugLaunch /Executable:HelloWorld /OptionsFile:J:\HelloWorld\LaunchOptionsLinux.xml` といれて、 [Enter]をおす
![dd3.png](https://qiita-image-store.s3.amazonaws.com/0/75594/da061641-a8ee-1bbc-f4d6-2938476e13bc.png)

4. Visual Studio 2015のUIで、デバッガがうごきます。 
 - [F10] Step Over
 - [F11] Step Into
 - Shift+[F11] Step Out
 - 変数の値を変更したり、Call Stackみたりできます。

---
- デバッグ中は、裏でgdbが動いてますね。
![dd4.png](https://qiita-image-store.s3.amazonaws.com/0/75594/a906b84a-4973-1455-af7f-d5ee411648ec.png)