Mac M2下VSCode用Makefile Tools调试C++程序报错求助
在Mac M2上使用VSCode Makefile Tools调试C++程序时出现"illegal option --"错误
在Mac M2设备上,尝试使用VSCode的Makefile Tools扩展调试C++程序,已配置tasks.json、settings.json、launch.json文件。调试时出现"illegal option --"错误,但直接运行程序正常,多方搜索未找到类似问题的解决办法,希望得到相关建议。
配置文件内容
tasks.json
{ "version": "2.0.0", "tasks": [ { "label": "build & debug tests", "type": "shell", "command": "g++", "args": [ "-g", "-std=c++14", "-I/src", "-lgtest", "-o", ], "group": "build", "problemMatcher": [ "$gcc" ] }, { "type": "cppbuild", "label": "C/C++: g++-12 build active file", "command": "/opt/homebrew/bin/g++-12", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ] }
settings.json
{ "files.associations": { "iosfwd": "cpp", "ostream": "cpp", "vector": "cpp", "__bit_reference": "cpp", "__hash_table": "cpp", "__split_buffer": "cpp", "array": "cpp", "deque": "cpp", "initializer_list": "cpp", "string": "cpp", "string_view": "cpp", "unordered_map": "cpp", "filesystem": "cpp", "iostream": "cpp" }, "C_Cpp.default.configurationProvider": "ms-vscode.makefile-tools", "makefile.panel.visibility": null, "makefile.launchConfigurations": [ { "cwd": "/Users/dinosaur/streetsmart", "binaryPath": "/Users/dinosaur/streetsmart/knn", "binaryArgs": [ "-d -n 3 -V 3730 datasets/NYCoordsTest_graph.txt datasets/NY_knnqueries.txt" ] }, ], "makefile.configurations": [ { "name":"streetsmart configuration", "makeArgs": ["distFunc=L2"] } ] }
launch.json
{ "version": "0.2.0", "tasks": [ { "label": "build-all", "type": "shell", "command": "main_knn distFunc=L2", } ], "configurations": [ { "type": "lldb", "request": "launch", "name": "Launch", "program": "${workspaceFolder}/knn", "args": [], "cwd": "${workspaceFolder}" } ], }
调试错误信息
Warning: Debuggee TargetArchitecture not detected, assuming x86_64. =library-unloaded,id="/Users/dinosaur/streetsmart/knn",target-name="/Users/dinosaur/streetsmart/knn",host-name="/Users/dinosaur/streetsmart/knn" Loaded '/usr/lib/dyld'. Symbols loaded. Loaded '/Users/dinosaur/streetsmart/knn'. Symbols loaded. =library-unloaded,id="/Users/dinosaur/streetsmart/knn",target-name="/Users/dinosaur/streetsmart/knn",host-name="/Users/dinosaur/streetsmart/knn" Loaded '/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/libstdc++.6.dylib'. Symbols loaded. Loaded '/opt/homebrew/Cellar/gcc@12/12.3.0/lib/gcc/12/libgcc_s.1.1.dylib'. Symbols loaded. Loaded '/usr/lib/libiconv.2.dylib'. Symbols loaded. Loaded '/usr/lib/libcharset.1.dylib'. 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/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_collections.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_configuration.dylib'. Symbols loaded. Loaded '/usr/lib/system/libsystem_containermanager.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_darwindirectory.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/libc++abi.dylib'. Symbols loaded. Loaded '/usr/lib/libobjc.A.dylib'. Symbols loaded. Loaded '/usr/lib/liboah.dylib'. Symbols loaded. Loaded '/usr/lib/libc++.1.dylib'. Symbols loaded. =thread-selected,id="1" L2 /Users/dinosaur/streetsmart/knn: illegal option -- The program '/Users/dinosaur/streetsmart/knn' has exited with code 0 (0x00000000).
问题分析与解决建议
1. 参数格式错误(核心问题)
settings.json中makefile.launchConfigurations的binaryArgs将所有参数写为单个字符串,导致调试时程序把整个字符串当作一个参数解析。程序会尝试解析"-d -n 3 -V 3730 ..."这个整体,把其中的空格当作参数的一部分,进而识别出无效选项。
修复方式:将参数拆分为单独的字符串元素:
"binaryArgs": [ "-d", "-n", "3", "-V", "3730", "datasets/NYCoordsTest_graph.txt", "datasets/NY_knnqueries.txt" ]
2. 配置文件冲突检查
如果使用launch.json的Launch配置启动调试,需确保:
- 要么在
launch.json的args字段中填写正确拆分的参数,同时移除settings.json中的makefile.launchConfigurations避免冲突; - 要么直接使用Makefile Tools的调试配置,确保
settings.json的参数配置正确。
3. 修复编译任务的语法错误
tasks.json中第一个任务"build & debug tests"的args里,"-o"后面缺少输出文件名,会导致编译失败。补充文件名,例如:
"args": [ "-g", "-std=c++14", "-I/src", "-lgtest", "-o", "test_debug" ],
4. 解决架构不匹配警告
Mac M2是arm64架构,调试时提示assuming x86_64,说明编译生成的是x86_64二进制,可能引发兼容性问题。在编译任务中添加-arch arm64参数,确保生成arm64目标文件:
例如修改C/C++: g++-12 build active file任务的args:
"args": [ "-fdiagnostics-color=always", "-g", "-arch arm64", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ],
5. 验证参数解析逻辑
确认程序的参数解析代码是否支持短选项与值的空格分隔(如-n 3),若程序仅支持-n3格式,需调整参数写法为对应的格式。
内容的提问来源于stack exchange,提问作者mnmbs
相关产品推荐
相关产品推荐

