我有一个不知何故的工作程序(仅用C编写) - 它在运行时执行它应该做的事情,但在退出时崩溃。 我有一个提示,形式为:
“运行时检查失败2变量周围的堆栈已损坏”
我从未调试此类错误(甚至使用Visual Studio调试器),因此我不知道从哪里开始。我在函数调用周围设置了一些断点,这会产生堆栈损坏,并为用于该调用的变量添加监视,也为寄存器添加了监视(我特别查找了EBP,ESP更改,但我检查了所有这些)但是它们是正确的值。我也在该功能中设置了断点,但仍然看不到任何可疑的东西。
有没有办法查看堆栈以及如何推送,访问和弹出值?另外,当我处理这些事情时,我应该寻找什么呢?
问题是由DLL引起的(我可以访问它的代码)。 DLL对它的函数使用了__stdcall约定,似乎它们正确地清理了堆栈,但是我愿意相信它没有并且在这个调用之前,期间和之后开始查看堆栈。这是一个很好的起点吗?但是,我怎么做呢? Stack Frame窗口不是特别有用(或者我不知道如何使用它)。
编辑:我手动完成(查看代码,绘制我的堆栈)并发现一些问题是堆栈框架没有正确设置。固定它。仍然对一些调试器功能感到好奇,这些功能可以让它更快。