Visual Studio CodeでC/C++のデバッグ on Mac
MacのVisual Studio CodeでC++のコードをデバッグできるようにします。
Visual Studio CodeでC/C++のコンパイルをするまで
今回ビルドするC++コードのサンプルはこちら↓
// main.cpp #include <iostream> int main() { for (auto i : {2, 4, 5}) { std::cout << i << std::endl; } return 0; }
ターミナルでビルドすると次のようになります。
$ clang++ -std=c++11 main.cpp $ ./a.out 2 4 5
これをVisual Studio Codeでビルドしてみます。
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "0.1.0", "command": "clang++", "isShellCommand": true, "args": [ "main.cpp", "-g", "-std=c++11"], "showOutput": "always" }
これでビルドができるようになりました。Command+Shift+Bでビルドを実行すると、a.out(とa.out.dSYM)が生成されます。
デバッグ
- launch.jsonの生成
{ "version": "0.2.0", "configurations": [ { "name": "C++ Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceRoot}/a.out", "args": [], "stopAtEntry": false, 〜省略〜
最低限の設定はこれで完了です。 あとはブレークポイントやウォッチを設定するなりして、Visual Studioと 同様のデバッグができるようになります。
Mac + XcodeでChromiumをビルド
MacでChromiumをビルドしたときの備忘録。
ソースを読んでブレークしたりしたいのでXcodeでビルドします。
基本的には以下のガイドに従えばビルドできます。
https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md
dept_toolsのインストール
dept_toolsのクローン。すぐに終わります。
$ mkdir chromium $ cd chromium $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
このツールを使ってビルドするので、次のようにパスを通しておきます。
export PATH=$PATH:`pwd`/depot_tools
ソースのチェックアウト
ソースをクローンします。一時間ほどかかりました。
$ mkdir chromium $ cd chromium $ fetch chromium $ cd src $ gclient runhooks
Xcodeのワークスペースを生成
Xcodeでデバッグしたいので、Xcode用のワークスペースを生成します。コマンドラインオプション--ide=xcodeをつけて、次のようにコマンドを実行します。
$ gn gen out/Default --ide=xcode
ビルド
ワークスペースを開きます。
$ open out/Default/all.xcworkspace
そのままビルドを実行しようとすると、
'The run destination My Mac is not valid for running the scheme...'
というようなエラーが発生。
原因は、ワークスペースで指定されているOSX SDKのバージョンがPCにはインストールされていないからのようで。SDKのバージョンを、[Build Settings] > [Base SDK]より変更します。
後はビルドを実行します。ビルドにはかなりの時間がかかります。私のPCでは9時間かかりました。
最後に実行画面。
これから、ソースを読んでいきます!
C++のstd::binary_searchで構造体を検索&イテレーターを取得
ソート済み構造体の配列を検索して、見つかった位置のイテレーターを取得するというネタです。
タイトルにはstd::binary_searchとありますけど、binary_searchでは見つかった位置は
分からないので、std::lower_boundを使用します。
定番ですけど、いざやろうとするとパッと出てこないので、備忘録も兼ねて。。
検索する関数
#include <algorithm> template <class ForwardIterator, class T, class Compare> ForwardIterator bfind(ForwardIterator first, ForwardIterator last, const T &val, Compare comp) { ForwardIterator it = std::lower_bound(first, last, val, comp); if (it != last && !comp(val, *it)) { return it; } else { return last; } }
構造体などのデータ配列を検索するので、比較関数compも指定してやります。
サンプル
#include <algorithm> #include <tuple> #include <vector> int main() { using Data = std::tuple<int, std::string>; std::vector<Data> data{ {4, "a"}, {2, "b"}, {1, "d"}, }; auto comp_first = [](const Data &lhs, const Data &rhs) { return std::get<0>(lhs) < std::get<0>(rhs); }; auto comp_second = [](const Data &lhs, const Data &rhs) { return std::get<1>(lhs) < std::get<1>(rhs); }; auto it = bfind(data.begin(), data.end(), Data{0, "b"}, comp_second); if (it != data.end()) { std::cout << "Data={" << std::get<0>(*it) << ", " << std::get<1>(*it).c_str() << "}" << std::endl; } it = bfind(data.begin(), data.end(), Data{0, "c"}, comp_second); if (it == data.end()) { std::cout << "Not found" << std::endl; } std::sort(data.begin(), data.end()); it = bfind(data.begin(), data.end(), Data{4, ""}, comp_first); if (it != data.end()) { std::cout << "Data={" << std::get<0>(*it) << ", " << std::get<1>(*it).c_str() << "}" << std::endl; } it = bfind(data.begin(), data.end(), Data{3, ""}, comp_first); if (it == data.end()) { std::cout << "Not found" << std::endl; } return 0; }
実行結果
Data={2, b} Not found Data={4, a} Not found
簡単ですね。
Android NDK 開発環境の構築
今日はAndroidアプリの開発環境を構築します。
言語の価値≒開発環境と言われることもあるので、しっかりと選んでいきます。
NDKを使う開発環境構築
自分の作成したいアプリはAndroidアプリで、開発環境の要件としては
- C++ & NDKを使用可能
- Windowsでも使用可能
- Vimのキー操作が可能
といったところです。
以前にEclipse+NDKで開発したことがあったのですが、今はAndroid Studioというい選択肢もあるようで。
新しいものを使ってみるのもいいことだと思うので、今回はAndroid Studioを採用することにします。
Android Studioのインストール
こちらから Windowsようのインストーラをダウンロード。
現時点でのAndroid Studioのバージョンは1.4です。ここからはガイド に従ってインストールを進めます。
まずはインストーラを実行。すべてデフォルトのままインストール。
JDK7が必要とのことですが、自分のPCには既にインストール済みだったのでここはスキップ。インストールを完了し、Android Studioを起動。初回起動だからなのか、起動に数分間かかりました。
起動するとSetup Wizardが表示されます。以下をインストールします。
- Tools > Android SDK Tools
- Tools > Android SDK Platform-tools
- Tools > Android SDK Build-tools (最新のバージョンのもの)
- Android X.X > SDK Platform (X.Xは最新のバージョンのもの)
- Android X.X > エミュレータのシステムイメージ (ARM EABI v7a System Imageなど)
- Extras > Android Support Repository
- Extras > Android Support Library
- Extras > Google Repository
- Extras > Google Play services
初めてSDK Managerを起動すると、必要なものは選択状態になっているようです。
私はそのままAndroid6.0のものをインストールすることにしました。
Hello Worldアプリ作成
とりあえずは、Hello Worldアプリというか、ウィザードがデフォルトで作成するアプリの
ビルドを試してみます。
Setup WizardでStart a new Android Studio projectを選択し、
デフォルト設定のまま進めます。
Start a new Android Studio projectを選択
デフォルトのままNext
これもデフォルトのままNext
Blank Activityを選択してNext
デフォルトのまま、Finish
ウィザードを完了すると下のような画面が現れます。
何も編集せずに、とりあえずアプリケーションをビルド&実行します。
Android SDKのインストールでAndroid6.0をインストールしているので、 Android virtual deviceにはNexus 5 API 23 x86を選択しました。
これで、アプリが起動するかと思いきや、エミュレーターの速度が異常に遅い!!
それも実用不可能なレベルで!
で、色々ネットで調べると、高速化の手段があるようで。
Android エミュレーターの高速化
エミュレーターの高速化には、Intel x86 Emulator Acceleratorを使用します。
SDK Managerにて、Extra > Intel x86 Emulator Accelerator(HAXM installer)を選択し、 インストールを実行します。
1ではインストーラーがダウンロードされるだけなので、インストーラーを実行します。
なお、インストーラーは
C:\Users\ユーザー名\AppData\Local\Android\sdk\extras\intel\Hardware_Accelerated_Execution_Manager\intelhaxm-android.exe にダウンロードされています。(1のヒントにダウンロードしたフォルダ名の記載あり)あとは、エミュレーターの作成です。私の場合、最初からインストールされているNexus 5のCPUがx86ということもあり、 これを複製して、設定を変更することにしました。
AVD Managerを起動します。
Nexus 5を右クリックしてDuplicateを選択します。
エミュレーターの設定画面が現れます。 Show Advanced Settingsをクリックして詳細設定を行います。 今回変更するのは次の2点です:
- Use Host GPUをオン
- RAMを512MB以下に設定
- もう一度、アプリを実行してみます。
高速化がうまく働いているようなら、コンソールに次のようなメッセージが表示されます。
HAXM is working and emulator runs in fast virt mode
まとめ
これでアプリをビルドをできるようになりました。
エミュレーターは高速化してますけど、それでも少し遅さを感じてしまいます。
業務でアプリを開発されている方は、どうされているのかと思ってしまいます。
Atom + Vimキーバインドでブログ開始
どうもはじめまして、cindy-bassです。
ここはてなブログにてブログを始めることにしました!
自分、プログラマです。メインはC++でガリガリとコード書いてます。
Java, Python, JavaScript, C#になるとC++の半分以下に。。(T_T)
スマホ向けに作りたいアプリができたので、それを作りつつブログを書けたらと思ってます。
Atom
ブログを書くにあたって、何を使って文章を書こうかとあれこれ調べたところ、
Atomを使うことにしました。
何故ならMarkdownが使えて、何よりもVimのキーバインドが使用できるから!
私、Vim愛好家なもので(笑)
とりあえずは、次のようにセットアップしました。(プラットフォームはWin8)
一応、UIを日本語化。File - Settings を選択します。
Installをクリックし、検索欄にjapanese-menuと入力し、Packageボタンをクリック。 japanese-menuが見つかったら、Installボタンをクリック。
日本語化すると次のようになりました。
Vimのプラグイン
日本語化のときと同様に、vim-modeとex-modeをインストール
まとめ
というほどのことはないんですけど、しばらくはこれで ブログを書いていこうと思います。 Vimのパッケージですけれど、本物のVimと比べると物足りなさは感じますけど、 ある程度基本的なことろはカバーされているので十分です。