今天同事要进行 lldb进行调试dotnet的bug
本来在x86 上面进行相应的处理 但是发现报错. 没办法 正好有一台借来的arm服务器就搞了一下.
简单记录一下安装方法
1. 安装 apt的source.list
增加一行 银河麒麟的 官方源
deb http://archive.kylinos.cn/kylin/KYLIN-ALL 4.0.2sp2-server-ft2000 main restricted universe multiverse
2. 安装lldb 之前百度了下 发现 apt-get install lldb 是找不到的 必须要带版本号
安装命令为
apt-get install lldb-3.9
大概有 200M的安装文件.
注意一下版本号的问题
dotnet :2.1.1。查看官方文档2.0.0只能使用lldb 3.6;2.1以上必须是3.9.0;所以特别要注意版本问题,一个是createdump 2.0的有bug会失败。二个是dotnet版本和lldb版本要匹配 被调试分析的应用也是用2.1跑起来的。
安装完之后可以简单使用了 注意一点的是 使用命令为
lldb-3.9
注意 如果调试 dotnet 的时候 需要安装 dotnet-sos 的部分
安装命令为 1. 安装dotnet tools dotnet tool install -g dotnet-sos 2. 安装 sos 相关内容 这个命令默认将dotnet-sos 放到了 用户的家目录下面 比如我的是root用户就放到了 /root/.dotnet/tools 目录下面 cd 到这个目录 并且执行命令 ./dotnet-sos install 注意 我这边可能环境变量少一个内容 所以一开始报错了 如: root@inspur:~/.dotnet/tools# ./dotnet-sos install A fatal error occurred, the required library libhostfxr.so could not be found. If this is a self-contained application, that library should exist in [/root/.dotnet/tools/.store/dotnet-sos/3.1.137102/dotnet-sos/3.1.137102/tools/netcoreapp2.1/any/]. If this is a framework-dependent application, install the runtime in the default location [/usr/share/dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location. 需要执行一个命令 export DOTNET_ROOT=/dotnet 然后在安装就可以了: root@inspur:~/.dotnet/tools# ./dotnet-sos install Installing SOS to /root/.dotnet/sos from /root/.dotnet/tools/.store/dotnet-sos/3.1.137102/dotnet-sos/3.1.137102/tools/netcoreapp2.1/any/linux-arm64 Creating installation directory... Copying files... Creating new /root/.lldbinit file - LLDB will load SOS automatically at startup SOS install succeeded
3. 好像直接 lldb yourdumpfile 就可以 打开了
但是 问题出现了 会报错..
root@inspur:~# lldb-3.9 dotnet_time_2020-08-04_16\:52\:18.24453 (lldb) target create "dotnet_time_2020-08-04_16:52:18.24453" Current executable set to 'dotnet_time_2020-08-04_16:52:18.24453' (aarch64). (lldb) plugin load /dotnet/shared/Microsoft.NETCore.App/2.1.3/libsos.so error: plug-in is missing the required initialization: lldb::PluginInitialize(lldb::SBDebugger)
这一块需要专家给处理一下了 我搞不定了.
这个错误需要专家指导..
不过如果安装了 dotnet-sos 那么可以使用 soshelp 的命令
如下: