在OS X上,Visual Studio Code无法加载符号

7
我正在尝试在OS X上使用ASP.NET Core建立一个Web API。我已经正确设置了我的环境(我认为是这样),并且能够使用终端中的“dotnet build”构建和运行我的应用程序,并且可以从Visual Studio Code启动调试,断点按预期工作。我的问题是,在使用EF Core查询我的Sqlite数据库时,我收到一个错误。这里EF Core并不重要,因为当我调试并尝试找出错误时,我没有得到任何堆栈跟踪。当我跨越失败的代码时,调试控制台打印:
Exception thrown: 'System.InvalidOperationException' in Microsoft.EntityFrameworkCore.dll
Loaded '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Diagnostics.StackTrace.dll'. Cannot find or open the symbol file.
Loaded '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.Reflection.Metadata.dll'. Cannot find or open the symbol file.
Loaded '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.IO.MemoryMappedFiles.dll'. Cannot find or open the symbol file.
Loaded '/usr/local/share/dotnet/shared/Microsoft.NETCore.App/1.0.0/System.IO.UnmanagedMemoryStream.dll'. Cannot find or open the symbol file.

很多 无法找到或打开符号文件。 这样的错误信息在启动时都会被打印出来。我已经检查了指定位置的文件是否存在,并且不应该存在任何读取权限问题(使用sudo code . 启动 VS Code,甚至在相关文件夹中执行了 sudo chmod 777 *)。所以,有什么想法为什么这些符号没有加载?

听起来你没有正确安装Visual Studio Code和/或.NET Core。你能否编辑您的帖子描述您使用的安装步骤?您根本不需要执行chmod。(我现在在OSX上愉快地运行VSCode。) - JasCav
使用Homebrew进行标准安装,就像这里描述的那样:https://www.microsoft.com/net/core#macos。使用标准安装程序安装VS Code。sudo和chmod只是瞎猜,我假设pdb文件的位置对正在运行的进程不可访问或类似的情况。 - Erik
我按照相同的指示(在OSX上)操作,遇到了完全相同的问题。我不想每次调试时都看到一堵警告墙。 - Phil Ricketts
2个回答

4

在Windows 10虚拟机上运行VS Code时,遇到了相同的问题。

我找到的解决方法是在project.json文件的buildOptions部分添加"debugType": "portable"设置。

我的设置如下:

"buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "debugType": "portable"
}

在VS Code中进行调试其实并不难。

嘿,那个起作用了!而且你说得对,它并不是一个糟糕的调试器。 - joshmcode
这显然是默认情况下在OSX和Linux上发生的,根据此链接:https://learn.microsoft.com/nb-no/dotnet/articles/core/tutorials/using-on-macos - Erik
5
自 1.1 版本以来,这已经成为标准。问题仍旧存在。 - Phil Ricketts
@Erik,我所理解的链接教程是,"debugType":"portable"将在Windows上“生成可移植的PDB文件(默认情况下在Mac OSX和Linux上生成)”。 OP正在寻找.NETCore dll的符号以帮助调试。报告缺少符号文件是没有用的。 - David Clarke

0

我觉得你对VSCode的错误提示有些混淆了。它并不是说无法加载DLL文件,而是指无法加载“符号”文件,这些文件的扩展名是.PDB。为了调试由DLL文件生成的错误,调试器需要相应的符号文件,所以如果PDB文件不存在,改变DLL文件的权限也无法消除错误。

我刚开始在Mac上使用VSCode,从我的观察来看,如果你使用Homebrew安装dotnet core(这是他们推荐的方法),你将无法获得PDB文件,并且在启动调试器时会看到类似的错误信息。但这并不妨碍我调试自己的代码,因为我的DLL文件会生成一个PDB文件。只有当你需要调试dotnet core本身出现问题时,这才会成为一个问题。


同样的情况,但是VSCode仍然无法浏览已安装包的代码,例如Nancy、EF等。我只能看到我的代码,堆栈跟踪中的所有其他语句都是“无名称”。有什么线索吗? - Devesh Khandelwal
我不认为我感到困惑 :) 如果dll没有加载,进程会崩溃得更快。正如我在问题中所述,我能够进行调试、设置断点并逐步执行代码。只是当输出窗口应该打印堆栈跟踪时,它找不到所需的符号。 - Erik
@Erik 我也有同样的问题。你是怎么解决的?是通过其他安装方法安装符号吗? - Phil Ricketts
@PhilRicketts 目前为止,我还没有找到解决方法,不幸的是。但是我可以在变量窗口中获得异常详情,但堆栈跟踪仍未显示在输出窗口中。 - Erik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接