LinuxのののVisual Studio 2019のリモート開発を使用します

一般的に、我々はLinuxアプリケーションを開発する2つのオプションがあります。

  1. Linux上で書かれたプログラムを直接テストとデバッグを実行します
  2. リモートツールを使用して、WindowsまたはMac OS X上で開発

私が直接Linux環境で開発されたが、彼らは作業効率に影響を与える可能性がある奇妙な環境を残すためのシステムに精通している場合は、Windows環境で開発作業に従事している多くの人々がありますが。

だから、今日、私たちは、Linuxリモート開発し、どのように共通の落とし穴を回避するために、Windows上のVisual Studio 2019を使用する方法を見ていきます。

引用

  • クロスプラットフォームのVisual Studio開発入門
  • Linuxのリモート開発は、vs2019を使用して行います
    • プロジェクトを作成します。
    • リモートプロジェクトの設定
    • リモート環境を追加します。
    • ローカルおよびリモートデバッグを書きます
  • ピットステッピング避けます
    • 中国の文字化け
    • 数学関数およびサードパーティのライブラリを使用します

クロスプラットフォームのVisual Studio開発入門

あなたは不思議に思うかもしれません、対あなたがこの知識を理解していないにもかかわらず、リモートの開発であるが開発することができますが、私は簡単な説明をするために2分を費やすしたいと思います。

対リモート開発は、2つのステップに分かれています。

  1. リモート環境への接続を作成し、(また、ヘッダファイルの他の部分を指定することができ、後で説明します)ローカルに同期リモート環境VSシステムヘッダファイルを聞かせて、C ++コード補完は、最初のファイルのみが必要です。
  2. コードは、適切なリモート環境を選択し、書かれた、対指定された場所のリモート環境にコードとオブジェクトファイルをコピーして、ご使用の構成に応じてコンパイルされるとき。
  3. その後VSは、デバッガがもたらす対あなたが完全に効率性と利便性を享受することができ、その間、GDBコンソールやgdbserverをして​​、あなたのプログラムを実行します。

上記の手順の後には、内部の対で書かれた、独自のクロスプラットフォームのプログラムをデバッグすることができます。

LinuxのののVisual Studio 2019のリモート開発を使用します

はじめにこの終わりに、のグラフィックのチュートリアルを見てみましょうvs2019でのLinuxを開発しました。我々が開始する前に、すべてのポイントの最初の準備作業を行うには:

  1. vs2019をインストールし、Linuxの機能のためのC ++をチェックしてください。
  2. 静的IP Linux仮想マシンを構成として、使用可能なLinuxのリモート環境を準備し、GCCツールチェーンとOpenSSHがインストールされています。

準備ができたら、私たちは、に行くべきです。

プロジェクトを作成します。

LinuxのLinuxの機能のためのC ++をインストールした後、私たちは、図示のように、パネルで新しいプロジェクトを作成するためのオプションが表示されます:

ここでは、あなたもここに脇に置く、cmakeのプロジェクトを作成する方法を見ることができ、その後の記事を構築空白のコンソールアプリケーションプログラムを解決するためのプロジェクト対伝統を使用することを選択しました。

ここでは何も言うこと、保管場所項目を選択し、ローカルの場所に注意を払っていない、バックでリモートマシンの位置が設定されます。

成功を作成する私たちのリモート開発プロジェクトを作成するときにクリックします。

リモートプロジェクトの設定

対コンフィギュレーション・スペース・プロジェクトを編集することはできませんので、我々はプロジェクトの最初を作成しmain.cpp、その後、上部のメニューをクリックしてください:プロジェクト- >プロパティは、プロジェクトの設定インターフェースを見ることができます:

リモートコンピュータは、リモートデバッグ接続マネージャが追加です。プロジェクトの種類を変更したり、収納位置の結果をコンパイルする必要がない限り、ここでは一般的に、変更は必要ありません。あなたが選択をすることができ、複数のリモート環境を持っている場合。

セクションには、デバッグを提供gdbし、gdbserver前者は対Linuxの設定のカラー出力の端子場合は、ここでGDBを実行し、出力を返すために、Linux上でコンソールを起動し、それらを知っていない対後悔させている、それはのように表示されます元の文字列; gdbserverをつぶやきはありません解決バックホールデータ対ローカル、リモートの使用gdbserverのを、可能になります。あなたはそれが不可能、その後のgdbプログラムと引き換えに、マイクロソフトの推奨を参照し、ポイントを破るために見つかった場合はここでは、gdbserverをを選択しています:

次の最初のヘッダファイルは、コードの自動補完やヒントに対これらのファイルを使用して、リモート設定環境を同期させる必要がある重要な構成は、次のとおりです。

デフォルトのパスは、通常、すでにLinux上のヘッダファイルのほとんどが含まれているコピー、我々は通常、変更する必要はありません。ヘッダファイルの同期は、プロジェクトの成功の後の最初の建物の後に発生するか、リモート接続を手動で同期を追加します。

そして、C / C ++コンパイラ、gccとgのように構成されている]を選択++これらのパラメータを説明するためのコンパイラ引数は我々の議論の範囲を超えて、我々は適切な++標準バージョンcを選択する必要があります。

ここでは、++ 17 cを選びました。その他の設定は、Windows、などに開発する場合、対のパラメータが自動的にG ++、およびないここでそれらを繰り返すように変換することができます。

リモート環境を追加します。

リモート環境で、私たちは、デバッグや実行するためのヘッダファイルを同期することができます。

>オプション - - >クロスプラットフォーム - コンパイルや対プロジェクトをデバッグ初めて自動的にリモート環境に接続することができます、もちろん、我々は、デバッグをお勧めします>設定Connection Managerを:

、あなたのリモートIP /ドメイン名を記入し、デフォルトでSSHポート22、あなたは別のポートに変更する必要が安全である、ここではデフォルトの設定を使用しての利便性を実証し、上記のパスワード、あなたが秘密鍵より安全なSSHログインを使用して検討すべきです。

ログインに成功すると、接続が完全に添加され、我々は、設定マネージャのヘッダは、ヘッダファイルを同期するために使用されているリモートマネージャ、続い参照してください。

リモート1時間からコピーされたファイルの数が多いが、それは長い時間がかかる可能性があるため、同期ヘッダファイルを起動します[更新]ボタンをクリックして、これらのファイルは、ローカルにキャッシュされます。

OKを追加するには、このようなリモート環境では、コードを書き始めることができます。

ローカルおよびリモートデバッグを書きます

この時点では、すでに対中のLinuxプラットフォーム用のコードを書いて、正しくオートコンプリートワークスことができます。

あなたは、Linuxでのヘッダファイルと構造が既に特定され見ることができます。あなたは自動補完を見つけることができない場合は、まず、インテリセンス役に立たない場合は、リフレッシュやヘッダファイルを再同期してみてください再オープンしてクローズ対してみてください(単にリモート接続やプロジェクトの設定が変更されている追加の後に通常発生します)。

終わりに、我々は我々のプログラムのデバッグを実行するには、[編集]ボタンをクリックすることができるようになります:

それ以外の場合はエラーになり、アーキテクチャの構築は、あなたがのx64またはx86を選択することができますが、アームを選択することはできません、リモートのx64環境、など一貫してリモート環境でなければならないことに注意してください。

これは、出力のLinuxカーネルの現在のバージョンを意志、テストコードです:

#include <sys/utsname.h>
#include <iostream>
#include <cstdio>

int main()
{
    auto start = chrono::high_resolution_clock::now();
    utsname names;
    if (uname(&names) != 0) {
        std::perror("cannot get unames");
    }

    std::cout << "Linux kernel version: " << names.release << std::endl;
}

デバッグをクリック - > Linuxのコンソール、コンソールと対話することができます表示され、あなたがコンテンツを入力するか、プログラムの出力を見ることができます:

プログラムが正常に実行されます。

ピットステッピング避けます

リモートコンパイルが正常に完了した後、私たちはその後、ブレークポイントで変数を見て、ブレークポイントを設定するために、デバッガ対を使用することができ、でも実行するLinuxダイナミック性能が分析します。

しかし、その間に、いくつかのピットが事前に出てきがあります。

中国の文字化け

人々が期待される出力はちんぷんかんぷんの束が常に必然的に神経質になり、実際に見たときのコーディングの問題とのトラブルは常に、結局、最初の場所になります。

我々はすべて知っているように、特に中国のWindows環境では、コーディングの慢性的な問題となっているが、多くの場合、GB18030またはGBKで、団結は、Linux UTF8です。

以下の実用的な例を見て、私たちは通常、プログラムはASCII文字のみが含まれ、その後、問題は、製造が容易ではないので、我々は少し中国語の文字を追加します。

#include <sys/utsname.h>
#include <iostream>
#include <cstdio>
#include <string>

int main()
{
    utsname names;
    if (uname(&names) != 0) {
        std::perror("cannot get unames");
    }

    std::cout << "Linux kernel version: " << names.release << std::endl;
    std::cout << "输入内容:";
    std::string input;
    std::cin >> input;
    std::cout << "你输入了:" << input << std::endl;
}

上記のテスト手順については、我々はデバッグ用コンソールを開き、今、中国の出力のビットを追加します。

あなたはその結果である、我々はそれにいくつかの情報を入力し、中国人が文字化け出力になる見ることができます。

これは、文字化け行われた中国の書かれた手順で見ることができる、と私たちの入力ではありません。理由は簡単で、それはLinuxコンソール環境に入った時に、私たちの入力が正しくコーディングされているので、デフォルトのエンコーディングは、UTF8で、ソースファイルの内容がGB18030ですので、Linuxコンソールで(UTF8デコードにデフォルトのデータとディスプレイ)は文字化けが発生します。

非常にシンプルで、それを解決するために、エラーの原因を知って、ソースファイルのエンコーディングは、ライン上にUTF8に変更され、我々は最も簡単な方法を選択し、高级保存选项修正エンコーディング(このメニューオプションはデフォルトでは非表示になって、多くのオンラインがあるが、それを表示する方法について説明しますデータ方式):

保存したファイルを設定した後、今エンコードされたファイルは、UTF8に変更されています。

今すぐ修正後のプログラムを実行します。

営業結果は正常です。

数学関数およびサードパーティのライブラリを使用します

Linux上のライブラリが提供する標準的な数学関数を使ってご利用のCPPまたはcに基づいて、また、しつこい質問であるいくつかの状況があります。

  1. CPPを使用する場合は、にlibstdc ++はlibmのに依存するので、G ++プログラムをコンパイルするときに自動的に数学ライブラリをリンクします使用します。
  2. それがある場合は、Cを使用する場合はsqrt(4)、このような形、新しいgccが代替措置はリンクのlibmを表示する必要はありません提供しています。
  3. あなたの引数が可変である場合、コンパイラはlibmをリンクするあなたを必要とするように選択することができ、1を接続します。

あなたは、C数学関数を使ってプログラムを作成している場合はそのため安全側は、その後、接続のlibmを指定することは常に正しいです。(ここでは具体的な参照)

また、このようなブーストなどのサードパーティのライブラリのこのタイプを使用する場合、また、注意が必要です。Windowsの追加の良いでは我々は通常、追加のライブラリディレクトリを含むディレクトリを指定して、正常にコンパイルすることができますが、Linux上で明示的にDLLの名前を指定する必要がありますので、私たちは、プロジェクトのプロパティで設定します。

Linuxでは、私たちは努力の、上記の重複を軽減するために、PKG-config設定を使用することができ、そして対に、私たちは直接、あなたがしたい場合は、少し問題になるだろう、あなたのプロジェクトは、サードパーティのライブラリを多数使用してこのツールを使用することはできませんこの問題を解決するために、あなたがフォローアップの記事を参照することができ、私はプロジェクトをビルドするために+のcmakeの対紹介します。

ここでは、少しブーストクロノ機能検査で例を与える、あなたは、Linux上で指定する必要が-lboost_chrono設定されています:

ここでは、完全なコードは次のとおりです。

#include <sys/utsname.h>
#include <iostream>
#include <cstdio>
#include <string>
#include <boost/chrono.hpp>

int main()
{
    namespace chrono = boost::chrono;
    auto start = chrono::high_resolution_clock::now();
    utsname names;
    if (uname(&names) != 0) {
        std::perror("cannot get unames");
    }

    std::cout << "Linux kernel version: " << names.release << std::endl;
    std::cout << "输入内容:";
    std::string input;
    std::cin >> input;
    std::cout << "你输入了:" << input << std::endl;
    auto counter = chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start);
    std::cout << "程序运行了:" << counter.count() << "ms\n";
}

それ以外の場合はエラーになり、プログラムが正常にデバッグすることができます、[実行]ボタンをクリックします。

おすすめ

転載: www.linuxidc.com/Linux/2019-09/160471.htm