WinDbg调试unity3d无响应实战

本文介绍了使用WinDbg调试Unity3d应用出现无响应问题的实战经验。通过查看线程堆栈、分析汇编代码,定位到导致死循环的Update()函数中的数学运算,最终找出并解决了因浮点数比较导致的无限循环问题。
摘要由CSDN通过智能技术生成

    今天终于让我碰上了,无响应了,毫无疑问,马上放下一切工作,Attach上去。

    首先看下任务管理器,cpu 13% ,应该是死循环了。(注意 win7死循环是不会cpu 100%的)。

    运行!runaway, 发现0号线程特别费时,也就是主线程。

    然后切到0号线程,查看堆栈,妈蛋什么都没有。

    这里我纠结了好久,然后g了一下,又打断点,堆栈突然出现了。

    不过还是没啥直接的函数名,只知道是Update()函数里面。

    然后只能看汇编了。当然你很难一下子就找到入口,并且一句一句分析,我是先通篇运行,知道大概的一个流程和大致都有哪些指令。

    比如看到了Transform.GetPosition,我就知道了这个函数肯定有position, 然后还是有fld指令,也就是说肯定操作了浮点数。

    另外我这个人的脾气就是坚决不写死循环,所以我可以肯定自己是不会在for中写出死循环的,因为for我用的非常熟练,i--这种东西我从来不写。

    那么肯定是while了,查找全局代码,就找到了两处while.

    观察法了一下,我操,真是有的,但还不能大意,稍微验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yxriyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值