准备工作
- dotnet发布到linux-x64的程序,在*/shared/Microsoft.NETCore.App/2.1.3 文件夹中有libsosplugin.so 和libcoreclr.so ,这两个库是调试时使用的,在发布的时候,注意查看有没有这两个库,因为在arm平台上使用的时候发现没有libsosplugin.so,只有libsos.so,当然这个在linux-x64上发布的程序中也有。
- 安装SOS,这个要求是2.1或者.NET Core SDK 安装,如果现实dotnet-sos已经安装了,注意在使用的时候判断是否要卸载之后,重新安装。安装命令:dotnet tool install -g dotnet-sos. 更新命令:dotnet tool update -g dotnet-sos 卸载并且移除lldb配置命令:dotnet-sos uninstall 移除SOS安装工具:dotnet tool uninstall -g dotnet-sos
- 在安装的时候,可能需要安装.NET Core SDK ,使用的命令:sudo apt-get install dotnet-sdk-2.1,版本号自己定。
开始调试步骤
- dotnet netcore应用生成内存转储文件 */dotnet/shared/Microsoft.NETCore.App/2.1.1/createdump PID,这会生成core.PID
- lldb dotnet -c /tmp/coredump.PID -o "plugin load */shared/Microsoft.NETCore.App/2.1.3/libsosplugin.so" 注意这里的so库的位置是你程序的位置,不要指错了位置,
- sos ClrStack 可以查看线程信息。之后的调试信息http://blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-dump-on-linux/,https://codeblog.dotsandbrackets.com/net-core-memory-linux/,https://www.cnblogs.com/calvinK/p/9263696.html 参照这些就好了。