Mac系统M1使用CodeLLDB在vscode调试

您所在的位置:网站首页 coderunner怎么用 Mac系统M1使用CodeLLDB在vscode调试

Mac系统M1使用CodeLLDB在vscode调试

2023-09-11 19:01| 来源: 网络整理| 查看: 265

自从我将系统升级到Monterey,vscode就变了,这个配置不能Debug了,心痛之余,我找到了另外的解决方案:vscode 插件 CodeLLDB。一些同学可能不知道什么是LLDB,我在这里进行了简短总结,可以看一下。

下面讲一下怎么使用CodeLLDB.

第一步,扩展程序搜索并安装CodeLLDB. 第二步,编写一个test.cpp,打上断点调试,大概率调试是不通过的,可能会安装CodeLLDB需要的package,等他装好,然后会跳出launch.json,在launch.json中加入以下代码:

{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "clang++ - 生成和调试活动文件", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "lldb", "preLaunchTask": "C/C++: clang++ 生成活动文件" } ] }

以上文件中这几个选项比较重要:

type —— 必须设置为lldb。这个参数决定了使用哪种调试器。cwd —— 必须改为${workspaceFolder}。这里将当前目录改为工作区目录,不改的话调试找不到文件。externalConsole —— 设置为true。否则无法调试有输入的文件。

第三步,保存之后重新调试,这时会发现系统自动生成了task.json。至此就可以开始调试了。 第四步,在.vscode文件夹下创建settings.json文件,设置files.exclude选项。

以上配置完成之后会发现一个问题:生成的可执行文件默认是没有后缀的,这样就无法通过files.exclude隐藏,目录里会出现很多可执行文件。

解决办法: 想要解决,就要搞清可执行文件是在哪里产生的,以及在哪里使用的。在编译之后会产生可执行文件,在链接阶段要使用到可执行文件。在我们的配置中:

有两个地方进行编译: 第一,运行前会编译。可通过在setttings.json文件夹设置code-runner.excutorMap选项解决; 第二,调试前会编译。可通过在task.json中设置任务执行方式进行改变。

有一个地方会使用:在我们启动调试后的链接。可通过在lanuch.json中设置链接文件格式解决,如果不做设置,在链接文件的时候会出现找不到文件的情况。

设置之后的三个文件如下,可以直接复制粘贴: settings.json

{ "files.exclude": { "**/.git": true, "**/.svn": true, "**/.hg": true, "**/CVS": true, "**/.DS_Store": true, "**/Thumbs.db": true, "**/*.dSYM":true, "**/*.out":true, }, //code-runner settings=================================================================================================== "code-runner.executorMap": { "cpp": "clang++ $dir$fileName -o $fileNameWithoutExt.out -g -std=c++17 && $dir$fileNameWithoutExt.out", } }

task.json

{ "tasks": [ { "type": "cppbuild", "label": "C/C++: clang++ 生成活动文件", "command": "/usr/bin/clang++", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "-std=c++17", ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" } ], "version": "2.0.0" }

lanuch.json

{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "clang++ - 生成和调试活动文件", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "lldb", "preLaunchTask": "C/C++: clang++ 生成活动文件" } ] }

详细说来,其实相比于最初的配置文件,更改的只有三个地方: 1.settings.json中增加以下代码,使得在运行的时候使用clang++、c++11并产生有.out的可执行文件,同时执行可执行文件。

//code-runner settings========================== "code-runner.executorMap": { "cpp": "clang++ $dir$fileName -o $fileNameWithoutExt.out -g -std=c++17 && $dir$fileNameWithoutExt.out", }

其中-o参数是为了为可执行文件命名,-g参数是避免编译器优化,为了方便调试。

2.tasks.json中修改以下选项,在最后加上.out,这样产生的可执行文件就会带.out后缀。

tasks -> args -> "${fileDirname}/${fileBasenameNoExtension}.out"

3.launch.json中修改以下选项,在最后加上.out,这样链接的时候就回去找带.out后缀的可执行文件。

configurations -> program -> "${fileDirname}/${fileBasenameNoExtension}.out"


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3