VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以下のとおりです、見てみましょう!

最近、Linux 上でプログラムをデバッグしていますが、直感的なグラフィカル インターフェイスがないため、gdb の使用に関してはまだ初心者レベルです。ネットで検索したら、2つの選択肢が見つかりました。1つはVisualStudio2019のリモートデバッグ機能を使う方法です。最近はVScodeを使っているので試していません。時間があるときに試してみます。もう 1 つの解決策は、VScode のリモート開発プラグイン (Microsoft が公式に提供) を使用してリモート デバッグを実行することです。この記事ではこのソリューションを紹介します。
このプロセスを紹介する他の記事もオンラインではありますが、それらはすべて成功した状況を説明しているだけで、プロセス中に遭遇した問題については説明されておらず、一部はあまり明確ではありません。それで、書いてみようと思いました。また、このドキュメントではリモート コンパイルではなくリモート デバッグについて紹介していることに注意してください。VScode のリモート デバッグもサポートされていますが、現時点では必要ありません。必要に応じて後で設定します。さらに、私のプロジェクトは g++ で直接ではなく、cmake と make を使用してコンパイルする必要があるため、まだ設定を開始していません。
VScode のリモート デバッグは、gdbserver メカニズムを使用して実行されます。一般的な原則は、Windows またはその他のグラフィカル システムで VScode を使用し、リモート開発プラグインを使用して SSH でリモート Linux に接続し、gdbserver によって提供される接続を介してリモート デバッグを実行することです。具体的な設定方法については、以下に記載します。

必要なソフトウェアとプラグイン

まず、gdb と gdbserver をインストールする必要があります。これらは、リモート システムの種類に応じてインストールできます。私はデフォルトでインストールされているUbuntuを使用します。コマンドは次のとおりです。

sudo apt install gdb
sudo apt install gdbserver

次に、公式の C/C++ プラグインである VScode のリモート開発プラグインをインストールする必要があります。この C/C++ プラグインを Linux にリモート接続した後、リモート Linux にもインストールする必要があります。以下のスクリーンショットでは、プラグインのアンインストール ボタンの横に「SSH で拡張機能が有効になっています: xxxx」と表示されており、すでにインストールされていることがわかります。インストール方法は接続成功後に後ほど紹介します。

リモート開発C++

リモート接続

Remote Development プラグインをインストールすると、Linux にリモート接続できるようになります。SSH 経由で接続する方法は 2 つあります。1 つはアカウントとパスワードを使用する方法です。もう 1 つのタイプは、公開鍵と秘密鍵の接続です。ここで接続するには公開鍵と秘密鍵を使用することをお勧めします。リモートデバッグのプロセスでは、後で複数の場所に接続するため、パスワードを何度も入力するのは面倒です。公開鍵と秘密鍵を使用すると、一度設定するだけで済むため、非常に便利です。アカウントとパスワードを使用して接続することを選択した場合は、この手順をスキップできます。 ssh リモートの設定方法は比較的簡単ですが、Windows では大きな問題があります。

まず、リモート Linux 上で公開鍵と秘密鍵のペアを生成します。

# 次のコマンドを実行し、プロンプトに従って公開鍵と秘密鍵のペアを生成します。
ssh-keygen -t rsa

# 公開鍵は生成されたパスに直接保存され、authorized_keysに転送されます
# ユーザーの .ssh ディレクトリに保存します。通常、生成時のデフォルト パスはユーザーの .ssh ディレクトリです。# 生成された公開キーが「vscode_rsa.pub」であると仮定します。最後に、権限設定に注意してください。デフォルトでは変更する必要はありません。
cat /home/user/.ssh/vscode_rsa.pub >> /home/user/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys

# 秘密鍵を Windows マシンにダウンロードします # パスは「D:/.ssh/vscode_rsa」と仮定します

ここまでは問題はありません。次に、VScode で接続を構成する必要があります。
リモート開発プラグインをインストールすると、下の図に示すように、VScode の左端にリモート リソース マネージャー アイコンが表示されます。次に、SSH ターゲットを選択し、プラス記号をクリックして、user@ip の形式で追加すると、プロンプトに従ってリモート接続の構成ファイルが表示されます。または、以下のインターフェイスのプラス記号の横にある歯車をクリックして構成ファイルを直接開き、次の形式に従って追加し、IdentityFile の後に秘密キーのパスを追加することもできます。

ここに画像の説明を挿入

ホスト xxxx
 ホスト名 xxxx
 ユーザーのユーザー名
 アイデンティティファイル D:/.ssh/vscode_rsa

その後、元のファイル参照インターフェイスでリモート フォルダーを開くことができます。しかし、接続が構成されると、VScode ターミナルはエラーを報告します。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 警告: 保護されていない秘密鍵ファイルです! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'vscode_rsa' の権限が開放されすぎています。
秘密鍵ファイルは他人がアクセスできないようにする必要があります。
この秘密鍵は無視されます。
ロードキー「vscode_rsa」: 不正な権限

根本的な原因は秘密鍵の権限の問題です。これを Linux で行う場合は、chmod を使用して直接 644 に変更できますが、Windows の場合は少し面倒です。

解決:

秘密キーを右クリックして「プロパティ」を選択し、「セキュリティ」タブを選択して、下の「詳細設定」ボタンをクリックし、新しいポップアップウィンドウの下部にある「継承を無効にする」をクリックし、継承ボタンの上にある「追加」ボタンをクリックして、現在のウィンドウのログインユーザーを秘密キーの所有者として再設定し、すべての権限を確認します。最終的には、以下のようになるはずです。

ここに画像の説明を挿入

このとき、VScode リモート接続を再度開くと問題は発生しません。

リモートデバッグ

VScodeの設定

まず、上記の C/C++ プラグインをリモート Linux にインストールする必要があります。インストール方法は簡単です。プラグインをクリックします。インストールされたプラグインの中に、緑色のプロンプト [SSH の場合: IP] があるプラグインがあることがわかります。C/C++ プラグインを見つけて、緑色のプロンプトをクリックし、リモート Linux にインストールします。インストール後、VScode を再起動します。リモート Linux も起動していなかったので再起動した方が良いです。後で操作したところ、VScode は選択したデバッガーの種類が見つからないというメッセージを表示し、選択したデバッガーに基づいて launch.json ファイルを自動的に生成しませんでした。しかし、再起動せずに成功できるのであれば、それが最善でしょう。
次に、左上にあるファイルを参照する VScode リソース マネージャーを開きます。リモート フォルダーを開くように求められます。このとき、プロンプトに従って、デバッグするプログラムが配置されているフォルダーを開きます。

次に、メニューバーで「実行」->「構成の追加」を選択すると、デバッグ環境を選択するためのプロンプトがポップアップ表示されます。[C++ GDB/LLDB]を選択すると、launch.json ファイルが自動的に生成されます。次のように:

{
 // IntelliSense を使用して関連するプロパティについて学習します。 
 // マウスをホバーすると、既存のプロパティの説明が表示されます。
 // 詳細については、https://go.microsoft.com/fwlink/?linkid=830387 をご覧ください。
 "バージョン": "0.2.0",
 「構成」: [
 {
  "name": "(gdb) 開始",
  "タイプ": "cppdbg",
  「リクエスト」: 「起動」、
  "プログラム": "${ワークスペースフォルダー}/プログラム",
  "引数": [],
  "stopAtEntry": true、
  "cwd": "${ワークスペースフォルダー}",
  "環境": []、
  "外部コンソール": false,
  "MIモード": "gdb",
  「セットアップコマンド」: [
  {
   "description": "gdb のプリティープリントを有効にする",
   "テキスト": "-enable-pretty-printing",
   "失敗を無視": true
  }
  ]
 }
 ]
}

自動生成されない場合は、VScode が環境を認識しておらず、インストールしたプラグインが有効になっていないため、VScode とリモート Linux を再起動する必要があります。
生成された launch.json ファイルで変更する必要があるのは、プログラム フィールドだけです。${workspaceFolder} は、先ほど開いたリモート フォルダーを参照します。デバッグするプログラムの名前を指定するだけで済みます。 stopAtEntry フィールドはデフォルトで false に設定されており、デバッグの開始時にブレークポイントがメイン関数にあるかどうかを示します。これを true に変更します。その他の設定については、デフォルトの設定をそのまま使用し、何も追加する必要はありません。

リモートLinuxがgdbserverを起動する

次のようにして、リモート Linux で gdbserver を起動します。

#gdbserver localhost:<ポート> <プログラム> <引数>
gdbserver localhost:2333 /path/to/myprogram arg1 arg2

これは VScode が接続するときにデフォルトで使用されるポート番号なので、ポート番号を変更しないように注意してください。次に、VScode で F5 キーを押してデバッグすると、gdb によってソース コードが自動的に表示されるので、デバッグするプログラムのデバッグ バージョンを使用するのが最適です。

参考記事:

https://warmgrid.github.io/2019/05/21/remote-debug-in-vscode-insiders.html

https://superuser.com/questions/1296024/windows-ssh-permissions-for-private-key-are-too-open

VScode 構成のリモート デバッグ Linux プログラムの問題を解決するこの記事はこれで終わりです。より関連性の高い VScode リモート デバッグ Linux プログラムのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vscode を使用したリモート Linux 開発の実装
  • VSCode の Remote-SSH を使用して Linux に接続し、リモート開発を行う
  • Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

<<:  MySQLでビューを作成する方法

>>:  Vant Uploaderは1枚以上の写真をアップロードするコンポーネントを実装します

推薦する

MySQL 時間統計方法の概要

データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...

MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

1 要件の概要MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウ...

一般的なDockerコマンドの詳細な説明

1. ヘルプコマンド1. 現在のDockerバージョンを表示する docker バージョン2. イメ...

3つの簡単な調整でMySQLを最適化する

私は熟練した DBA になるつもりはありませんが、MySQL を最適化するときは、いくつかの構成を調...

MySQL インデックスの左端原則のサンプルコード

序文最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原...

MySql 8.0.11 のインストールと設定のチュートリアル

公式ウェブサイトアドレス: https://dev.mysql.com/downloads/mysq...

Linux システムで Code Cloud にプロジェクトをアップロードする方法

Code Cloudで新しいプロジェクトtest1を作成します。 公開鍵を取得するには次のコマンドを...

Vueライフサイクル機能の詳細な説明

目次ライフサイクル関数一般的なライフサイクルフックVue のインスタンス破棄について:要約するライフ...

HTML img タグの alt 属性と title 属性の使い方の紹介

ブラウザベンダーが標準を曲げて、ルールに従わないことをすると、問題や少なくとも混乱が生じる可能性があ...

Linux で Nginx 1.16.0 をインストールするための詳細なチュートリアル

最近 Linux をいじっていたので、nginx の新しいバージョンをインストールしたいと思いました...

Dockerは1行のコマンドでFTPサービス構築の実装を完了します

1行のコマンド docker run -d \ -v /share:/home/vsftpd \ -...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...

JavaScript マクロタスクとマイクロタスク

マクロタスクとマイクロタスクJavaScript はシングルスレッド言語です (マルチスレッドの場合...

DockerをインストールしてAlibaba Cloud Image Acceleratorを構成する方法

DockerのインストールDocker はオープンソースなので、Windows システムへのインスト...

Win 8 以降での最新の MySQL バージョン 5.7.17 (64 ビット ZIP グリーン バージョン) のインストールと展開のチュートリアル

まず、ブロガーはコミュニティ バージョンをプレイしていますが、学習とテストにはこれで十分です。 Bl...