質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3795閲覧

【Mac】【VSCode】デバッグコンソール上でマルチバイトな文字列を正しく出力させたい【C/C++】【環境構築】

Tsutsujun_1231

総合スコア19

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/06/11 08:50

編集2022/06/11 09:21

前提

MacPCでC/C++の勉強をしたくなったので、VSCodeで学習できるように、必要な拡張機能を加えつつ環境構築をしています。「これも使ってみよう。これは今段階ではいいかな...」と色々試行錯誤していたんですが、もう少しで構築完了というところでつまづいてしまいました...

実現したいこと

printfで、「こんにちは」といった日本語(マルチバイト文字)を含む文字列を、コンパイル&実行で出力される[ターミナル]パネル上ではなく、ビルド&デバッグで出力される[デバッグコンソール]パネル上で正しく表示させたいです。

該当のソースコード

C

1// ファイル名:test.c 2 3#include <stdio.h> 4 5int main(){ 6 printf("こんにちは\n"); 7 return 0; 8}

発生している問題・エラーメッセージ

上記のソースコードを拡張機能[C/C++]の機能で、「ファイルの実行」もしくは「ファイルのデバッグ」すると、[デバッグコンソール]パネルに以下のように出力されます。

Warning: Debuggee TargetArchitecture not detected, assuming x86_64. =thread-selected,id="1" =library-unloaded,id="/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test",target-name="/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test",host-name="/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test" Loaded '/usr/lib/dyld'. Symbols loaded. Loaded '/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test'. Symbols loaded. Loaded '/usr/lib/libSystem.B.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcache.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcommonCrypto.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcompiler_rt.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcopyfile.dylib'. Symbols loaded. Loaded '/usr/lib/system/libcorecrypto.dylib'. Symbols loaded. Loaded '/usr/lib/system/libdispatch.dylib'. Symbols loaded. Loaded '/usr/lib/system/libdyld.dylib'. Symbols loaded. Loaded '/usr/lib/system/libkeymgr.dylib'. Symbols loaded. Loaded '/usr/lib/system/liblaunch.dylib'. Symbols loaded. Loaded '/usr/lib/system/libmacho.dylib'. Symbols loaded. Loaded '/usr/lib/system/libquarantine.dylib'. Symbols loaded. Loaded '/usr/lib/system/libremovefile.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_asl.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_blocks.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_c.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_configuration.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_coreservices.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_darwin.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_dnssd.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_featureflags.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_info.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_m.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_malloc.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_networkextension.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_notify.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_sandbox.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_secinit.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_kernel.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_platform.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_pthread.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_symptoms.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_trace.dylib'. Symbols loaded. Loaded '/usr/lib/system/libunwind.dylib'. Symbols loaded. Loaded '/usr/lib/system/libxpc.dylib'. Symbols loaded. Loaded '/usr/lib/libobjc.A.dylib'. Symbols loaded. Loaded '/usr/lib/libc++abi.dylib'. Symbols loaded. Loaded '/usr/lib/libc++.1.dylib'. Symbols loaded. xe3x81x93xe3x82x93xe3x81xabxe3x81xa1xe3x81xaf The program '/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test' has exited with code 0 (0x00000000).

問題なのは

xe3x81x93xe3x82x93xe3x81xabxe3x81xa1xe3x81xaf

の部分で、このように文字化け...と言いますか、16進数の羅列みたいな感じで表示されてしまいます。この時[ターミナル]パネルの方は、以下のようになっています。

> Executing task: C/C++: gcc-11 アクティブなファイルのビルド < ビルドを開始しています... /usr/local/bin/gcc-11 -fdiagnostics-color=always -g /Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test.c -o /Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/test ビルドが正常に完了しました。 Terminal will be reused by tasks, press any key to close it.

関連する構成・設定ファイル

json

1// ファイル名:c_cpp_properties.json 2{ 3 "configurations": [ 4 { 5 "name": "Mac", 6 "includePath": [ 7 "${workspaceFolder}/**" 8 ], 9 "defines": [], 10 "macFrameworkPath": [], 11 "compilerPath": "/usr/local/bin/gcc", 12 "cStandard": "c17", 13 "cppStandard": "c++17", 14 // "cppStandard": "c++14", // 競プロ用 15 "intelliSenseMode": "macos-gcc-x64" 16 } 17 ], 18 "version": 4 19}

json

1// ファイル名:tasks.json 2{ 3 "tasks": [ 4 { 5 "type": "cppbuild", 6 "label": "C/C++: gcc-11 アクティブなファイルのビルド", 7 "command": "/usr/local/bin/gcc-11", 8 "args": [ 9 "-fdiagnostics-color=always", 10 "-g", 11 "${file}", 12 "-o", 13 "${fileDirname}/${fileBasenameNoExtension}" 14 ], 15 "options": { 16 "cwd": "${fileDirname}" 17 }, 18 "problemMatcher": [ 19 "$gcc" 20 ], 21 "group": { 22 "kind": "build", 23 "isDefault": true 24 }, 25 "detail": "デバッガーによって生成されたタスク。" 26 } 27 ], 28 "version": "2.0.0" 29}

json

1// ファイル名:launch.json 2{ 3 // IntelliSense を使用して利用可能な属性を学べます。 4 // 既存の属性の説明をホバーして表示します。 5 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 6 "version": "0.2.0", 7 "configurations": [ 8 { 9 "type": "lldb", 10 "request": "launch", 11 "name": "Debug", 12 "program": "${workspaceFolder}/${fileBasenameNoExtension}", 13 "args": [], 14 "cwd": "${workspaceFolder}", 15 "console": "integratedTerminal" 16 } 17 ] 18}

試したこと

拡張機能[Code Runner]を入れているので、これを使ってソースコードを「Run Code」、もしくはショートカット「[^control]+[⌥option]+[N]」キーを押すと、[ターミナル]パネル上では正しく出力されるようです。

VSCode % cd "/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/" && gcc test.c -o test && "/Users/tsutsujun/Documents/Computer-Science/languages/C/VSCode/"test こんにちは

エンコードが一致していないかもと思ったので(VSCodeのステータスバーには「UTF-8」と表示されています)、

json

1// ファイル名:launch.json 2 "env": { 3 "encoding": "utf-8" 4 }

もしくは

json

1// ファイル名:launch.json 2 "env": { 3 "encoding": "shift_jis" 4 }

を末尾に付記したのですが、結果は変わらず...また、コンソールメッセージ最上部の

Warning: Debuggee TargetArchitecture not detected, assuming x86_64.

も気になったので、

json

1// ファイル名:launch.json 2 "targetArchitecture": "x86_64",

などと付け足してみたんですが、結局プロパティ名"targetArchitecture"の下に黄色の波線が表れて、[問題]パネルで

Property targetArchitecture is not allowed.

と怒られてしまいました。

補足情報(FW/ツールのバージョンなど)

※この質問記述時点のバージョンです。コンパイラに関しては、競技プログラミングに興味があることもあり、clangではなくgccをインストールしております。

  • macOS:Catalina 10.15.7
  • VSCode:1.68.0
  • コンパイラ:gcc/g++ 11.3.0 (Homebrew GCC 11.3.0)

実装中の拡張機能

※VSCodeは他の言語でも使用しているため、一部のみを抜粋します。

  • C/C++ Extension Pack:v1.2.0
  • C/C++ Clang Command Adapter:v0.2.4
  • CodeLLDB:v1.7.0
  • Code Runner:v0.11.7
  • Japanese Language Pack for Visual Studio Code:v1.68.6092124
  • new-zenkaku:v0.0.4

json

1// ファイル名:settings.json(一部のみを抜粋コピペ) 2{ 3 "clang.executable": "clang++", 4 "clang.cxxflags": ["-std=c++17"], 5 // "clang.cxxflags": ["-std=c++14"], // 競プロ用 6 "code-runner.runInTerminal": true, 7 "code-runner.executorMap": { 8 "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 9 "cpp": "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 10 // "cpp": "cd $dir && g++ -O2 -std=c++14 $fileName && ./a.out", // 競プロ用 11 }, 12 // "cmake.configureOnOpen": true, 13 "[cpp]": { 14 "editor.defaultFormatter": "ms-vscode.cpptools" 15 }, 16}

追記

以下のように、英字の場合は正しく出力されます。

C

1// ファイル名:test.c 2 3#include <stdio.h> 4 5int main(){ 6 printf("Hello\n"); 7 printf("こんにちは\n"); 8 return 0; 9}

英語と日本語でそれぞれ挨拶プログラム


以上です。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

xe3x81x93xe3x82x93xe3x81xabxe3x81xa1xe3x81xaf

この16進数のような文字の羅列を正しく「こんにちは」と表示させる方法は分からなかったのですが、別の方法でデバッグすることにより、デバッグコンソール上に正しく「こんにちは」と出力させることはできました。

と言うのも、まず

json

1// ファイル名:launch.json 2{ 3 // IntelliSense を使用して利用可能な属性を学べます。 4 // 既存の属性の説明をホバーして表示します。 5 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 6 "version": "0.2.0", 7 "configurations": [ 8 { 9 "type": "lldb", 10 "request": "launch", 11 "name": "Debug", 12 "program": "${workspaceFolder}/${fileBasenameNoExtension}", 13 "args": [], 14 "cwd": "${workspaceFolder}", 15 "console": "integratedTerminal" 16 } 17 ] 18}

このプログラムの最後の一文である

json

1"console": "integratedTerminal"

なんですが、これは「VSCodeの[ターミナル]パネルをコンソールとする」ための処理の筈なのに、これがうまく機能していなかったことに疑問を感じていました。また、

Warning: Debuggee TargetArchitecture not detected, assuming x86_64.

の警告に関しては、launch.jsonの"type"プロパティを

json

1"type": "cppdbg",

と値を変更することによって、

json

1"targetArchitecture": "x86_64",

を[問題]が発生することなく追加することができるようになったのですが、それでも全く上記と同じメッセージが出力されたので、さすがに「おかしい」と思いました。

あれこれ考えた挙げ句、VSCodeのメニューから「デバッグの開始」を行うと、見事に[ターミナル]パネル上でデバッグをすることができましたw
実は、今までやってた「ファイルの実行」もしくは「ファイルのデバッグ」と言うのは、ソースコードタブの右側の横向き三角形から選択できる項目でした(下の写真より。真ん中の「Run Code」は拡張機能[Code Runner]によるもの)。
横向き三角形から選択できる項目一覧
これにより、ここから行えるビルドやデバッグはあくまでも拡張機能[C/C++]によるもので、本来の拡張機能[CodeLLDB]でやりたいデバッグではないのではないかという考えに至りました。あとは、launch.jsonの"console"プロパティの値を

json

1"console": "internalConsole",

と変更して、おまけに末尾に

json

1"preLaunchTask": "C/C++: gcc-11 アクティブなファイルのビルド"

を付記してデバッグする時に必ずビルドするようにプログラムを紐付かせれば...
デバッグ成功
いけました!きちんと設定したブレークポイントで処理が停まり、なおかつデバッグコンソール上で正しく「こんにちは」と日本語が表示されました。これからはメニューからか、ビルドする時は「[^control]+[F5]」キーを押し、デバッグのみする時は[F5]キーを押せば良いことになります。

そもそも「拡張機能[C/C++]によるデバッガは使いづらい」という情報を仕入れたのがキッカケで今回この[CodeLLDB]をインストールした訳ですが、その理由がこういうところなのかな〜と非常に痛感させらました。ありがとうございます!

★参考にさせていただいたページ様★
https://daeudaeu.com/vscose_debug_c/

投稿2022/06/11 17:47

Tsutsujun_1231

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問