首页 > 其他分享 >dump net core lldb 分析 (第五章 死循环调试分析)

dump net core lldb 分析 (第五章 死循环调试分析)

时间:2024-05-08 11:34:42浏览次数:21  
标签:core dump thread lldb 线程 堆栈 调试

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

clrthreads -live 先看看还在运行的线程有那些。然后通过thread select 线程编号(lldb命令)。来切换到当前线程。线程编号不是列表种的id字段,而是最前面一行的id。lldb 可以通过thread list命令来列举所有线程。

剩下的工作就是体力活动拉,一个一个看,一个一个分析。
比如,我们切换到线程3看一看他当前的堆栈信息
clrstack命令可以查看当前线程在托管代码种的堆栈信息。
dumstack则可以看到非托管代码种的堆栈信息
thread backtrace lldb查看堆栈信息的命令。

线程3,能看到当前栈在非托管代码中(libcoreclr.so!TwoWayPipe::WaitForConnection),看方法名字也能猜到干嘛的,不太像我们的目标。
另外,linux下面
ps -T -p 32728 命令可以查看到进行下线程的基本情况
top -H -p 32728 更happy。
所以在排查高cpu问题的时候能提供许多便利性,反而比内存问题要来得方便很多。(图中的pid等数据不是一致性的。因为在写blog的时候图片是多次截取的。)


所以在dump包的时候可以记录下来高cpu的线程id,然后通过thread select 找到对应的线程编号。在然后直接切换过去看一看就完事拉。
所以 thread select 30
clrstack看一看,嗯!当前线程在 linxu_dump_lldb.Controllers.ValuesController+<>c.<begin_cpu>b__1_0() [C:\Users\czd89\source\repos\ConsoleApp4\linxu_dump_lldb\Controllers\ValuesController.cs @ 31]。

看一看当前栈上面都有一些上面参数
CLRStack [-a] [-l] [-p];-p:看参数,-l:看局部变量,-a:=-l+-p;

当然,我们的代码是异步的,也没有捕获任何action里面的变量,所以这里的这个参数,以及参数里面的属性啥都没有。
从dll反编译代码也能和我们lldb看到的东西一一对以上。

标签:core,dump,thread,lldb,线程,堆栈,调试
From: https://www.cnblogs.com/kangao/p/18179333

相关文章

  • .Net Core中使用RabbitMQ
    开发中经常用到发布订阅的功能,之前一直用的Redis,使用过程中也出现了一些问题,后来换了RabbitMQ,用上去更顺手,简单记录一下。正文开始:RabbitMQ是一个开源的,基于AMQP(AdvancedMessageQueuingProtocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点,发布订阅等消息处......
  • FiddlerCore源码
    这是FiddlerCore5.0.2版本源码,支持.netframework和.netcore,百分百c#源码,功能全而且免费,无功能限制,还修复了多处bug。介绍:FiddlerCore可捕获和修改HTTP和HTTPS流量,而无需任何FiddlerUI。特点:HTTP和HTTPS流量捕获和修改。用于内容过滤和修改的强大对象模型。存......
  • EFCore 一对一 实体关系
    一对一实体关系当一个实体与最多一个其他实体关联时,将使用一对一关系。例如,Blog 有一个 BlogHeader,并且 BlogHeader 属于单个 Blog。必需的一对一//Principal(parent)publicclassBlog{publicintId{get;set;}publicBlogHeader?Header{get;se......
  • CentOS中使用tcpdump抓包 转载
    安装:yuminstalltcpdump命令使用:监听特定网卡tcpdump抓取第一块网卡所有数据包 [root@server110tcpdump]#tcpdumptcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecodelisteningoneth0,link-typeEN10MB(Ethernet),capturesize65535by......
  • openGauss 磁盘满故障引起的core问题
    磁盘满故障引起的core问题问题现象TPCC运行时,注入磁盘满故障,数据库进程gaussdbcore掉,如下图所示。原因分析数据库本身机制,在磁盘满时,Xlog日志无法进行写入,通过panic日志退出程序。处理办法外部监控磁盘使用状况,定时进行清理磁盘。......
  • 一次通过dump文件分析OutOfMemoryError异常代码定位过程
    OutOfMemoryError是Java程序中常见的异常,通常出现在内存不足时,导致程序无法运行。当出现OutOfMemoryError异常时,可能的现象是这样的。程序异常终止:OutOfMemoryError通常会导致程序异常终止。JVM无法为新对象分配内存时,会抛出该异常。堆内存不足:OutOfMemoryError表示堆内存......
  • Linux基础——BClinux8.2 排查vmcore异常宕机问题
     一、无法/var/crash生成文件1、参考配置:https://cloud.tencent.cn/developer/article/2367955 2、BCoe8.2调整配置   3、手动生成crashi.参考:参数详解https://blog.csdn.net/tombaby_come/article/details/134038949echo1>/proc/sys/kernel/sysrqechoc>/......
  • openGauss core问题定位
    core问题定位磁盘满故障引起的core问题GUC参数log_directory设置不正确引起的core问题开启RemoveIPC引起的core问题详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss GUC参数log_directory设置不正确引起的core问题
    GUC参数log_directory设置不正确引起的core问题问题现象数据库进程拉起后出现coredump,日志无内容。原因分析GUC参数log_directory设置的路径不可读取或无访问权限,数据库在启动过程中进行校验失败,通过panic日志退出程序。处理办法GUC参数log_directory设置为合法路径,具体请参......
  • 入门学习Docker部署Vue+NetCore+MsSql
    最近vultr的主机经常忘了续租,导致账号被禁用,主机被删掉每次重新部署都忘了之前怎么弄的,要重新查好多资料每个月6美金的主机XShell连接主机IP先安装docker开启docker服务镜像容器tar文件 saveload dockerimagesdockercommitbuildDockerfilepull仓库 查看......