vs可以知道当前执行到哪一行代码吗

.Net技术 码拜 8年前 (2016-07-12) 3027次浏览
是这样的 今天在调试一个程序 大致代码是这样的

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 很浪费时间 这样的情况出现不止一次了 程序跑着跑着就不动了的情况

解决方案

20

在调试状态,按中断,就是开始运行右边的 || ,然后看堆栈信息。

20

vs可以知道当前执行到哪一行代码吗

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明vs可以知道当前执行到哪一行代码吗
喜欢 (0)
[1034331897@qq.com]
分享 (0)