如何判断调试器何时对你说谎

时间:2015-02-06 20:58:20

标签: visual-studio debugging

请在此处查看我最近提出的问题:Deadlock with no user code

如何判断调试器何时以这种方式对你说谎?当然,除了表明它告诉你什么是不可能的?

我不喜欢依赖于此,因为我在程序中看到了很多“不可能”的状态,这些状态实际上是由于一些微妙或深奥的问题而发生的。

1 个答案:

答案 0 :(得分:1)

是的,这些是非常古怪的堆栈跟踪,尤其是第一个。难以理解这种情况如何发生。除非您调试优化代码,否则它通常不会搞砸。

提示#1,永远不要相信调试器在 调试发布内置代码时告诉您的内容。强烈避免它,但是当你需要解决僵局时,你并不总是拥有奢侈品。

强烈提示#2正在关注代码流。在“调用堆栈”窗口中从底部到顶部阻塞线程的正常线程是yourcode => runtime(msvr120)=> winapi层(kernel32等)=> native api(ntdll.dll)。通常就是这种情况,有一些情况下,这个流程被反转,从操作系统回调到你的代码,如窗口通知,线程启动(例如总是在堆栈的最底部),I / O完成。

哪个是古怪的,没有现实的情况,像ZwWaitForSingleObject()这样的低级本机api函数可以直接调用C运行时库。这是假的,只有顶部条目(Block)可能是准确的。是的,这种方式很难调试。