LLDB Debug .Net 7 In Ubunt22.04 for Exception

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LLDB Debug .Net 7 In Ubunt22.04 for Exception相关的知识,希望对你有一定的参考价值。

楔子

本来一个错误没必要搞个篇幅,但是遇到了好几次,甚至lldb里面调试莫名其妙的出现错误。本篇来解析下。

问题

调试.net的时候

lldb ./corerun abc.dll //abc.dll是参数.net的dll

lldb错误提示如下:

rror message: Unable to load shared library 'libSystem.Native' or one of its dependencies. In order to help diagnose loading problems, consider using a tool like strace. If you're using glibc, consider setting the LD_DEBUG environment variable:

从这段话可以看出两层意思,一是libSystem.Native.so这个库是个共享库,可能在全局环境变量之类的路径下。二是这个库无法被加载出来,所知导致了出错。

在Ubuntu22.04中dotnet 7安装之后会在以下路径:

.NET runtimes installed:
  Microsoft.AspNetCore.App 7.0.1 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 7.0.1 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

路径:usr/share/dotnet/shared/Microsoft.NETCore.App/7.0.1下面刚好包含了
libSystem.Native.so 这个库。

解决

既然lldb提示说,无法加载libSystem.Native.so这个库,那么可以搞个环境变量试下,运行如下命令

export CORE_LIBRARIES=/usr/share/dotnet/shared/Microsoft.NETCore.App/7.0.1

结果提示:

Process 108571 launched: '/home/tang/Downloads/runtime/artifacts/bin/coreclr/Linux.x64.Debug/corerun' (x86_64)
Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

File name: 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Process 108571 stopped

又提示了新的错误。

这个错误仔细看了下,无非就是版本不匹配出现的错误,导致进程终止了。仔细看了下lldb arg加载的dll,是.net 6.0.8的版本,而当前.net 版本是7.0.1看上面的dotnet --info命令。
把旧的dll删掉,用当前dotnet版本的dotnet new命令重新生成一个dll。问题解决,如下图所示。

结尾

在Ubuntu22.04上安装dotnet一定要安装,包签名密钥添加到受信任密钥列表,并添加包存储库,命令如下。

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

要完全删除dotnet库,以及残留文件可用以下命令:

sudo apt remove dotnet*
sudo apt remove aspnetcore*
sudo apt remove netstandard*

启动lldb之前一定不要忘记添加环境变量

export CORE_LIBRARIES=/usr/share/dotnet/shared/Microsoft.NETCore.App/7.0.1

以上是关于LLDB Debug .Net 7 In Ubunt22.04 for Exception的主要内容,如果未能解决你的问题,请参考以下文章

debug 使用lldb

VsCode 执行 debug(lldb/gdb) 命令

LLDB 不显示源代码

iOS开发-调试(debug)

常用 LLDB 命令

在Android与iOS中使用LLDB调试Rust程序