在VSCode中使用WSL Ubuntu读取文件提示lowlevellock.h不存在如何解决
VSCode报错原因
你看到的lowlevellock.h找不到的报错不是编译错误,是WSL环境下VSCode调试时的提示:你的代码运行崩溃触发了glibc底层逻辑,VSCode尝试跳转对应的glibc源码,但你的系统没有预装glibc调试源码,才会弹出文件不存在的提示,核心问题是你的C代码本身有逻辑错误导致崩溃。
代码存在的错误点
- 要读取用户主目录不能直接传字符串
"HOME",HOME是环境变量,需要调用getenv("HOME")获取实际路径,你当前的写法只会在当前工作目录下找名为HOME的文件夹,大概率不存在 opendir返回值判断逻辑完全写反:opendir成功打开目录返回非空指针,失败返回NULL,你现在的逻辑是成功打开目录反而报错退出,后续readdir读取空指针直接触发段错误- 定义的
char home[1024]没有做任何赋值就打印,输出的是栈内垃圾值,完全无效 - 打开的目录读取完成后没有调用
closedir关闭,会造成资源泄漏
修复后可正常运行的代码
#include <sys/types.h> #include <dirent.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> int main() { DIR *dir_ptr = NULL; struct dirent *file = NULL; const char *home_path = getenv("HOME"); if (home_path == NULL) { fprintf(stderr, "无法读取HOME环境变量\n"); return -1; } if ((dir_ptr = opendir(home_path)) == NULL) { fprintf(stderr, "%s 目录无法打开读取\n", home_path); return -1; } while ((file = readdir(dir_ptr)) != NULL) { printf("%s\n", file->d_name); } closedir(dir_ptr); return 0; }
可选:消除lowlevellock.h报错提示
如果后续调试需要避免弹出该提示,可以在WSL的Ubuntu中安装glibc调试符号和源码,执行命令:sudo apt install glibc-source libc6-dbg
内容的提问来源于stack exchange,提问作者김태헌
相关产品推荐
相关产品推荐

