请教:如何通过调试信息里的汇编代码看出程序出错的原因?


大家好啊,小弟有时候运算符写错了会导致程序运行时出现一个 “ 该内存不能为XXXXX ”的时候,我该如何通过汇编看出错误处在哪里呢?汇编的基本指令小弟知道,但是当跳出错误选择调试的时候就看不出错误在哪里了。比如说图片里的错误信息,而后选择调试的时候出来了汇编代码。汇编指令小弟知道什么意思,但是这样整体出来我就不明白要做什么了,因为现在在小弟看来里面的MOV  ADD TEST都是对数据进行赋值  相加  测试。我就是不明白如何通过汇编代码看出程序出错的原因。

    
 


 


  比如说第二张图片,程序中断在那个位置。我只能看懂的是汇编代码反应出来的是在进行赋值、然后清零、然后相加、然后测试。但是为什么程序会报错?我该如何才能看出出错的原因呢?当然。程序我检查了2次找到了错误,是操作指针的时候本该这样写:“ if ( str == NULL ) ”,结果我写成了“if ( str = NULL )”。导致的,我想学习大神们的通过汇编检查出错误 请指教


  另外还要说下 我这个是新注册的号,之前的号没有积分居然发不了贴。。。

4 个解决方案

#1


   其实小弟想说的是并不是所有的错误都是由于运算符写错了,而是 当程序编译通过但是运行发生错误的时候该如何从汇编代码中找出错误 ???请大神指点下。

#2


还是要给你转个话题:

调试运行出错中断之后应该不会转到汇编才对,应该会直接定位在源文件里。如果挂在库函数,也可以顺着调用栈往上找到你自己的代码。

然后说汇编:
一般只有程序行为过于诡异无法解释的时候才会去看汇编。主要要看生成的汇编是否实现了你期望的功能。如果没有,八成代码什么地方写错了。
需要去看汇编的情况是极少出现的。而且接汇编的实现与源代码的功能对应起来并不简单,即使你没有开优化。

#3


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

#4


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号