lldb 调试 linux下 .net Core 总结及开源扩展 yinuo

相信很多朋友在跟随微软.net core 从windows平台迁移至linux平台的过程中遇到很多别扭的地方,这里我只聊聊 运行时 调试的那些事儿。 首先从工具上来讲Windows上的windbg肯定是运行时的首选调试工具(因为有对应版本的SOS.dll),在linux平台运行时调试需要切换到lldb (Only lldb is supported by the SOS plugin. g
摘要由CSDN通过智能技术生成

相信很多朋友在跟随微软.net core 从windows平台迁移至linux平台的过程中遇到很多别扭的地方,这里我只聊聊 运行时 调试的那些事儿。

  • 首先从工具上来讲Windows上的windbg肯定是运行时的首选调试工具(因为有对应版本的SOS.dll),在linux平台运行时调试需要切换到lldb (Only lldb is supported by the SOS plugin. gdb can be used to debug the coreclr code but with no SOS support.)
    调试器的原理和功能基本一样,但细节到某个功能的命令自然会有区别,尤其是熟练了其中1个的命令之后(比如之前在看汇编的时候是Intel格式,现在要适用AT&T格式)…

这里先总结一些个人常用的命令在 windbg下和lldb下的对比:

  • 非托管命令:

非托管命令 lldb windbg
列出当前模块 image list lmf
当前线程 thread list ~
当前线程栈回溯 thread backtrace kp
所有线程栈回溯 thread backtrace all ~* kp
切换线程 thread select 2 ~2s kp
查看寄存器 re r r
查看内存(8字节) memory read –size 8 –format x <address> dq <address>

LLDB同GDB的命令对比:https://lldb.llvm.org/lldb-gdb.html

  • 托管命令:

这里先介绍下自己写的开源lldb调试.net Core扩展模块 Yinuo
在使用lldb调试linux .net Core程序的过程中,有很多不适应的地方,比如遍历并查看所有线程的托管栈回溯 在windbg下可以~*e !clrstack 在lldb里虽然有bt allclrstack 但是却只能手动切换单个线程再回溯,没有办法结合到一起,还有一个原因是lldb内命令输出的内容颜色统一,不太好区分重点关注的点,比如线程回溯比较关注方法名,托管对象转储比较关注内部对象地址等等,lldb的好处是支持python或者c++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值