在使用visual studio逐步调试web程序的时候,有时会出现两个线程,按F11逐步进行的时候,因为有两个线程,总是跳来跳去的,不知道为什么会出现两个线程,我把VS关了,把内部IIS也关掉,然后重新打开调试,还是这样,这是怎么回事,为什么会出现两个线程
同一个web项目,仅仅是几个页面调试的时候是这样,其他都正常,
就是断点乱跳提示“该进程或线程自上个步骤以来已更改”,项目里我没有用代码创建新线程。
新线索:
在点击页面一个链接,触发后台程序后,IntelliTrace会记录一次request请求由此已发线程,可不知道为什么在我F11逐步执行时,莫名其妙的又一次request导致了第二个线程的触发,然后就是断掉乱跳了,可我只点击了一次链接(手动一次request),但奇怪的是同样的代码编写方式(仅仅是处理的Model不同),其他的都没问题,就这个有问题,我的web项目时Asp.Net MVC,以前的Asp.Net WebForm也遇到过这种情况
我不知道为什么,同一个Action,两个参数,传递一个参数执行的时候,正常,单线程调试,F11逐步执行正常,当传递2个参数的时候,IntelliTrance中首先一次ASP.NET:GET...
然后断点调试,然后又不知道为什么又来了一次ASP.NET:GET...;第二次哪里来的???
//新线索
发 现问题出在浏览器向服务器(当然,是VS调试时用的VS的内部服务器)发送请求,服务器接收请求的时候,我在浏览器对链接点击了一次,服务器却接收到了两次 Request,导致处理这个Request的Action哪里的断点被命中了两次(两个Request,两个处理线程,因此一个断点被命中两次),不过 浏览器的开发工具中监视请求确实是发了一次Get请求,为什么服务器会收到两次呢????
不是两个进程,是两个线程
嗯,是线程,为什么会出现两个
@北在北方: 可能跟框架有关,检查一下调用堆栈,三方组件或自定义httpmodule?
@上帝之城: 没用第三方组件也没有自定义httpmodule
找到原因了,应该是没错了,我用的浏览器是火狐,使用开发者工具监视网络请求,Action请求了一次,但服务器接收到了两次请求,每次请求引发一个新线程的创建导致连个线程各个命中一次断点,由此导致“该进程或线程自上个步骤以来已更改的提示”并引发断点乱跳,但当在火狐的开发工具中“编辑并重发”请求时,服务器只接受到了一次请求,这是正常情况,换成其他游览器(只试过Opera)就没这个问题了,不过此问题也引发了新的需要应对的情况,就是这个所谓不正常的现象等同于点击链接发送请求,服务器断点命中,还没有发回响应到客户端时客户端又点击了一次链接发送一次请求,服务器这样就有两个线程同时运行了,断点乱跳,只是看起来像断点乱跳,实际上是两个线程轮流运行轮流debug罢了,自然,新的情况就是某些代码的并发问题,具体的就说不清了,正在调试多线程的代码下的bug.