专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
今天看啥  ›  专栏  ›  dotNET跨平台

调试实战 | 记一次有教益的 vs2022 内存分配失败崩溃分析(续)

dotNET跨平台  · 公众号  ·  · 2024-06-22 07:52
    

文章预览

前言 前一阵子遇到了 vs2022 卡死的问题,在 上一篇文章 中重点分析了崩溃的原因 —— 当 vs2022 尝试分配 923MB 的内存时,物理内存+页文件大小不足以满足这次分配请求,于是抛出异常。 本篇文章将重点挖掘一下 vs2022 在崩溃之前已经分配的内容。 说明: 本文很早就写了草稿,一直没时间整理发布,Finally~ 还是先从调用栈入手,找到关键参数,然后查看参数内容。 查找 vector 对象地址 栈帧 0b 对应的函数是 std::vector ::_Emplace_reallocate() ,栈帧 0c 会调用这个函数。根据调用约定可知,调用类成员函数时, rcx 会指向类对象,在这里 rcx 会指向 std::vector < :shared_ptr>> 类型的实例。可以通过查看栈帧 0c 的反汇编代码确定 rcx 的来源。 view-vector-instance-from-stackframe-0c 从图中可知, rcx 的值来自 rbp-0x70 。那 rbp 的值是多少呢?使用 uf 查看 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览