我正在尝试通过使用开发人员工具控制台监控网络来调试Internet Explorer 10的问题,但我遇到了奇怪的行为 - 有时控制台只是关闭而且所有记录的流量都丢失了.
更确切地说,呼叫序列如下(这实际上是标准的SAML 2.0身份验证流程,IDP上的客户端证书登录):
请注意,初始访问后的所有内容都会自动发生,用户无需单击任何链接或提交某些表单.
自动提交POST表单是这样的:
<html>
<head>
... some head data here...
</head>
<body onLoad="document.forms[0].submit()">
<form name="auto.submit.form">
... some form fields here...
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
问题出现在第2点之后 - 开发人员工具控制台刚关闭但这似乎不会影响浏览器的实际工作.
我也试过HttpWatch Professional - 我得到了同样的效果 - 插件只是停止录制或完全关闭.在这种情况下我不能使用Fiddler,因为它阻止我调试实际问题(即当启用Fiddler时它可以工作).此问题也是IE特有的,因此我无法使用其他浏览器的开发人员工具.
关于这个的任何想法/提示?
更新:我想我至少知道了一部分问题:当导航到不同区域时,开发人员工具窗口关闭.即在我的情况下,步骤2中的主机位于Internet区域,而来自本地Intranet区域中其他步骤的主机,然后在从第2点到第3点的导航完成后关闭开发工具窗口(而不是重定向时)从1到2完成).不同之处在于,第一个是通过javascript和自提交表单完成的,而另一个只是302重定向响应.
将所有站点添加到本地Intranet区域后,问题停止发生.仍然是一个谜,似乎是一个IE问题而不是开发工具问题,因为HttpWatch似乎也受其影响.
internet-explorer developer-tools httpwatch internet-explorer-10
如您所知,应该在循环中调用条件变量以避免虚假唤醒.像这样:
while (not condition)
condvar.wait();
Run Code Online (Sandbox Code Playgroud)
如果另一个线程想要唤醒等待线程,则必须将condition标志设置为true.例如:
condition = true;
condvar.notify_one();
Run Code Online (Sandbox Code Playgroud)
我想知道,这种情况是否有可能阻止条件变量:
1)等待线程检查条件标志,发现它等于FALSE,因此,它将进入condvar.wait()
例程.
2)但就在此之前(但是在条件标志检查之后)等待线程被内核抢占(例如,因为时隙到期).
3)此时,另一个线程想要通知等待线程有关条件.它将条件标志设置为TRUE并调用condvar.notify_one();
4)当内核调度程序再次运行第一个线程时,它进入condvar.wait()
例行程序,但通知已经丢失.
因此,等待线程无法退出condvar.wait()
,尽管条件标志设置为TRUE,因为不再有唤醒通知.
可能吗?