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

前提

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

実現したいこと

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

該当のソースコード

C

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

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

上記のソースコードを拡張機能[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

// ファイル名:c_cpp_properties.json{ "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFolder}/**" ], "defines": [], "macFrameworkPath": [], "compilerPath": "/usr/local/bin/gcc", "cStandard": "c17", "cppStandard": "c++17", // "cppStandard": "c++14", // 競プロ用 "intelliSenseMode": "macos-gcc-x64" } ], "version": 4}

json

// ファイル名:tasks.json{ "tasks": [ { "type": "cppbuild", "label": "C/C++: gcc-11 アクティブなファイルのビルド", "command": "/usr/local/bin/gcc-11", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "デバッガーによって生成されたタスク。" } ], "version": "2.0.0"}

json

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

試したこと

拡張機能[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

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

もしくは

json

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

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

Warning: Debuggee TargetArchitecture not detected, assuming x86_64.

も気になったので、

json

// ファイル名:launch.json "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

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

追記

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

C

// ファイル名:test.c #include <stdio.h> int main(){ printf("Hello\n"); printf("こんにちは\n"); return 0;}

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


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

コメントを投稿

0 コメント