ubuntu下vscodeデバッグ開発で踏んだ穴
5776 ワード
ubuntu18.04.1, ubuntu vscode c/c++ , , , 。
1.vscodeのインストール
インストールvscodeは簡単で、1つのコマンドで済む:$sudo apt-get install visual-studio-code 注:アンインストールが必要な場合は$sudo apt-get remove codeを使用します.
インストールに成功すると、メニューバーにvscodeのラベルが表示され、ない場合はterminalでコマンドを使用できます./コードオープンvscode
2.vscode使用過程で遭遇したピット
vscodeのインストールが完了したら、vscodeでコードエンジニアリングディレクトリを開き、プロンプトに従ってc/c++プラグインをインストールすると、コントロール+マウスでクリック(またはマウスの右ボタン)->Go to Definitionをクリックすると、no definition found for*をプロンプトします.このわけのわからない問題に頭がぼんやりしていて,何も考えられない.前にubuntu 16.04.4ずっと使っていたのに、どうして18.04に着いたのですか.1関数定義が見つかりません.その後、ヒントをよく見てみると、コードパスのフォルダ名デスクトップは中国語名(コードはデスクトップディレクトリの下に置かれている)で、vscodeが関数定義を追跡できないのではないでしょうか.そこでubuntuシステムを英語システムに切断し、切り替え方法は以下の通りである:1.システムメニューの設定を開く-』Region&Language language/言語を中国語からEnglish(United States) Format/フォーマットを中国からUnited States 2に変更してシステム 2を再起動する.再起動後、ホームディレクトリの下に中国語のデスクトップディレクトリのほかにDesktopディレクトリが1つ増えていることがわかり、中国語のデスクトップディレクトリの下のすべてのフォルダをDesktopディレクトリの下に切り取り、エンジニアリングコードディレクトリの下に他の中国語文字があるかどうかを確認し、ある場合は英語に変更し続けます. 3.vscodeを使用してプロジェクトフォルダディレクトリを開き、コントロール+マウスクリック-』Go to Definitionトラッキング関数定義を開き、関数は自動的に関数の定義ページにジャンプします.問題の解決に成功した.
3.vscodeデバッグlinuxでのc/c++エンジニアリング
3.1ソースコードの準備
準備ソースmain.cpp、コードは以下の通りです.
#include
int main()
{
printf("vscode test debug
");
int a = 3;
int b = 2;
int c = a*b;
printf("a+b=%d
",c);
getchar();
return 0;
}
3.2 vscode呼び出しmakefileコンパイルソース
3.1のテストコードのためにmakefileファイルを用意します.内容は以下の通りです.
TARGETNAME = build
all:$(TARGETNAME)
main.o:main.cpp
g++ -g -O0 -Wall -fPIC -c $^
$(TARGETNAME):main.o
g++ -o $@ $^
.PHONY:clean
clean:
rm -f $(TARGETNAME) main.o
$ g++ -g -c test.cpp
$ g++ -o test test.o
terminalでmakeがbuild実行可能ファイルを生成します.
3.3 vscodeデバッグプロファイルの作成
vscodeを使用してtestを開く.cppが存在するフォルダディレクトリは、F 5を押すとデバッグ環境選択ダイアログ(SelectEnvironment)がポップアップされ、ダイアログのドロップダウンメニューからC+(GDB/LDB)が選択する、下図のように、 選択後C+(GDB/LDB)プログラムが自動的にlaunchを生成する.jsonファイルは、次のようになります.
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
1)、将
"program": "enter program name, for example ${workspaceFolder}/a.out",
変更後:
"program": "${workspaceFolder}/test",
2)、将
"externalConsole": true,
変更後:
"externalConsole": false,
3)、プログラム起動パラメータがある場合、
"args": [],
変更後:
"args": ["arg1","arg2", "arg3"],
3.4 vscodeを使用してmakefileエンジニアリングをコンパイルする
ゞ 进入.ゞvscodeディレクトリ(隠しファイル)、tasksを作成する.jsonファイル.内容は次のとおりです.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make",
//"args":["-g", "${workspaceRoot}/main.cpp","-o","build"],
"problemMatcher": [
"$gcc"
]
}
]
}
保存後ctrl+shift+Bでコンパイルします.コンパイルに成功すると、現在のディレクトリの下にbuildという実行可能ファイルが生成されます.その後、コードにブレークポイントを設定し、F 5を押してデバッグコードを行います.
3.5 vscodeを使用してソースコードをコンパイルする
ゞ 进入.ゞvscodeディレクトリ(隠しファイル)、tasksを作成する.jsonファイル.内容は次のとおりです.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args":["-g", "${workspaceRoot}/main.cpp","-o","build"],
"problemMatcher": [
"$gcc"
]
}
]
}
保存後ctrl+shift+Bでコンパイルし、コンパイルに成功するとデバッグできます.
3.6デバッグ
vscodeでソースコードを開き、F 9を使用してデバッグが必要な場所にブレークポイントを設定し、F 5でプログラムを実行すると、linuxでのプログラムのデバッグを開始することができ、デバッグ方法はwindowsのvs開発環境とほぼ同じです.
4.踏み込みの経験と教訓をまとめる
1、vscodeのコードパスに中国語がないと、コード定義を追跡できないという問題が発生する.2、「externalConsole」:falseでなければならない.そうしないとデバッグに入れない.fu 3、argsは文字列4、tasksではなく配列である.jsonのlabelはコンパイル対象プログラム名であり、launchとしなければならない.jsonの「プログラム」:「${workspaceFolder}/$(programname)」、の$(programname)は同じです.そうしないとデバッグに問題が発生します.5、「command」:「g++」はg++を使用してコンパイルされ、c++ソースコードに対して、「gcc」はgccを使用してコンパイルされ、cソースコードに対応し、「make」はmakefileファイルに対応してコンパイルされ、ソースコードエンジニアリングディレクトリの下にmakefileエンジニアリングに対応する必要がある