是这样的 今天在调试一个程序 大概代码是这样的
foo(a,b,c,nLevel){
for(xx){
if(各种一大堆猜测的可能会出问题的条件){
int a = 0;
a++;//这里下断点
}
//其他代码
a = x;b = x;c = x;
foo(a,b,c,nLevel + 1);//递归调用
}
console.writeLine(nLevel);//调试用
}
//=====
this.foo(a,b,c,1);
程序的表现是 死在了 this.foo(a,b,c,1);里面 进入后就再也没有出来
那感觉就像是 被死锁了或者被阻塞了 但是代码里面并没有锁或者有阻塞的代码
问题的关键是 有时候程序正常有时候不正常 所以我都不知道怎么下断掉调试
而且Console.WriteLine(nLevel)也是停在某一层就不动了 可以确定是被阻塞了之类的
然后我就在 想了一些条件进入那个if里面下了一个断点 尝试很多次之后 终于被我给碰对了断点
然后单步往下在【//其他代码】发现 又是进入了一个函数后没有出来 我在一层一层的跟进才发现
某个函数里面调用了 SendMessage 函数像一个目标窗口发送一个消息 但是遗憾的是 目标窗口并没有响应这个消息 所以造成了代码一直被阻塞(
我压根就没想到对方会不回应消息这种不按套路出牌的情况) 所以我才赶紧换成了SendMessageTimeout函数
所以说我就想问 vs 有没有这样的功能 当程序不动的时候 点击某个菜单或者快捷键 能像下了断点一样 让程序停在当前正在执行的代码上面 如果有的话 或许我马上就能发现问题出在了SendMessage上面 而不是搞了半天才发现代码中有个一个SendMessage 很浪费时间 这样的情况出现不止一次了 程序跑着跑着就不动了的情况