首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/C++调试器未能使用VSCode在WSL中创建和写入reve.c

C/C++调试器未能使用VSCode在WSL中创建和写入reve.c
EN

Stack Overflow用户
提问于 2021-08-03 21:01:24
回答 2查看 546关注 0票数 1

我试图在WSL(2) (使用Ubuntu)的大学课程上用C开发,但在VSCode中使用C/C++内置调试器(通过C/C++扩展安装)有困难。对于我的测试,我正在运行以下代码:

代码语言:javascript
复制
#include <assert.h>
int main() {
    assert(1==0); 
    return 0;
}

当运行到断言时,调试器错误和VSC将在右下角显示以下消息:

Unable to open 'raise.c': Unable to read file 'vscode-remote://wsl+ubuntu/build/glibc-eX1tMB/glibc-2.31/sysdeps/unix/sysv/linux/raise.c' (Error: Unable to resolve non-existing file 'vscode-remote://wsl+ubuntu/build/glibc-eX1tMB/glibc-2.31/sysdeps/unix/sysv/linux/raise.c').

我试过每一个教程,github问题和堆栈溢出问题的答案,但没有任何效果。

我有理由相信,这与VSC没有编写/创建文件的某种权限有关,因为如果我按Create File (消息中提示的),它会说:

Unable to write file 'vscode-remote://wsl+ubuntu/build/glibc-eX1tMB/glibc-2.31/sysdeps/unix/sysv/linux/raise.c' (NoPermissions (FileSystemError): Error: EACCES: permission denied, mkdir '/build')

但是,如果我创建了文件夹/buildchmod 777,它可以创建文件,但不能将任何东西写入其中。

有人有办法解决这个问题吗?

另外,什么是raise.c,为什么我仍然需要它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-18 14:13:56

根据GDB跳过函数:https://sourceware.org/gdb/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html#Skipping-Over-Functions-and-FilesPuede将其添加到Launch.json中"configurations“下的"SetupCommands”中:

代码语言:javascript
复制
{
"description": "Skip glibc files",
"text": "-interpreter-exec console \"skip -gfi build/glibc-YYA7BZ/glibc-2.31//**/*\""
}

但是没有问题,添加WSL + Ubuntu /或VSL + ubuntu,它会忽略路径,它不能解决问题,这可能对其他环境有效,但如果VSCode使用远程连接则无效。根据文章编号811:禁用“无法打开文件”期间,debugThe开发人员说,"Skip“命令也在在线查找,目前(2019年1月27日)我不知道任何其他方式。但是在这个问题上还有其他解决方案,不需要编译Glibc库:

执行以下操作:

代码语言:javascript
复制
$ sudo apt install glibc-source
$ cd /usr/src/glibc
$ sudo tar xvf glibc-2.31.tar.xz

"2.31“应该更改为实际版本号Source,并且可以通过"LS”命令查看。然后将其添加到Launch.json中的“设置”中

代码语言:javascript
复制
"sourceFileMap": {
    "/build/glibc-YYA7BZ": "/usr/src/glibc"
}

"YYA7BZ“更改为出现在错误消息中的GLIBC后缀。如果此方法无效,则可以将路径更改为:c:/user//AppData/// /local包/local/ /localstate // rootfs usr/src/glibc,其中79RHKP1FNDGSC应更改您自己系统上的文件夹名。

现在搜索终端错误信息:

代码语言:javascript
复制
Done "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-p3q623bu.gbr" 1>"/tmp/Microsoft-MIEngine-Out-s4xm3p6g.lqk"

根据执行: ends调用时的错误,在启动'std ::logic‘实例后,这是由一个空指针引起的。造成此问题的可能原因之一是,我忘记添加必要的参数,以便在Launch.json中的“配置”中的"Args“列表中添加运行程序。

来源:https://programmerclick.com/article/54012533450/

票数 1
EN

Stack Overflow用户

发布于 2021-11-18 12:33:14

看到这个过程,类似的错误,但在不同的环境。https://stackoverflow.com/a/48287761/16842210

在我的例子中,我使用了try{}catch{}来打印错误,并且看到了什么,与reve.c没有任何关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68642754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档