代码改变世界

VS2008 JS调试和Silverlight 后台代码调试 相互影响的问题。---自己做实例证明

2011-10-08 17:16  沐海  阅读(674)  评论(0编辑  收藏  举报
但是有几点要注意。首先,不能在同一调试过程中调试托管代码和脚本。(即XAML。cs 和JAVASCRIPT)
这就是说,如果在XAML的隐藏代码中设置一个断点,并且已经打开了Silverlight调试,那么断点将发挥相应的作用
然而,如果在脚本中也设置了断点,那么在属性--"Silverlight"调试打开"Silverlight"调试打开时,脚本中的断点将不能起作用。


而:选中属性--"Silverlight"调试打开 还要 打开

测试前注意:IE开禁用脚本调试

不选择 Silverlight调试时。XAML的后台断点被忽略。JS和后台代码都可以调试。

当开Silverlight调试时,JS代码的VS调试器提示不能用。因为他开一个用于检测Silverlight了。所以说JS调试和Silverlight冲突。

提示“无法附加到崩溃进程。已附加了一个调试器。”

 

上面用来证明。选中Silverlight调试开关 打开  时  JS与Silverlight的冲突。  JS的调试器被Silverlight占领。
下面用来证明,选中Silverlight调试开关 关闭时。 也就是正常的调试VS时。 Xaml.CS  的断点被忽略。 

 

 选中属性--"Silverlight"调试打开 还要 停止

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

经过测试。
1.发现如XAML.CS这样类似的样式文件的隐藏代码,和JS调试有冲突。JS可调试。Xaml。cs后台断点  被忽略
2.  与Silverlight无关。 本页JS与本页隐藏代码没有冲突。因为是两个调试器。

VS为什么可以响应JS调试:调试前的设置你会发现。JS调试必须先把浏览器的禁用调试设置不选。这证明其实JS的调试虽然是通过VS来运行的。可VS在调试JS中时的作用和FireBUG一样的。都是针对浏览器调试的。而为什么有人说调试JS时,后台就没办法调试。JS调试针对是浏览器的。后台调试是针对IIS的请求的。所以这样时他们是没有冲突的。

3.包含silverlight的aspx文件(JS断点 和 隐藏代码断点) 与 silverlight 的Xaml。cs文件

   结果:Xaml。cs后台断点  被忽略

我测试。
1.选择了属性--WEB--Silverlight调试。
2.建立新页面Default。aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SilverlightApplication1.Web._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    
      <script type="text/javascript">
          function onSilverlightError() {
              var k = 1;
              debugger;
//断点              alert(k);
              window.open("http://localhost:18691/SilverlightApplication1TestPage.aspx");
        }
    </script>
</head>
<body >
    <form id="form1" runat="server">
    <div >
    <button onclick="onSilverlightError()"></button>
    </div>
    </form>
</body>
</html>

 

3.在SilverlightApplication1TestPage.aspx 指向的XMal后台 MainPage。xaml.cs 中加断点

 

namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            myButton.Click+=new RoutedEventHandler(myButton_Click);

        }

        void myButton_Click(object sender, RoutedEventArgs e)
        {
            
//加断点
Button at = sender as Button;
            at.Content = "点击";
            outputBlock.Text = "点击";
        }

        void myButton_MouseEnter(object sender, MouseEventArgs e)
        {
            Button at = sender as Button;
            at.Content = "鼠标ENTER";
            outputBlock.Text = "鼠标ENTER";
        }
    }
}

最后发现。Default的脚本运行了。可是Xaml.cs这个断点没响应(被忽略)。直接执行完毕了。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 
2.  本页JS代码和本页后台 CS文件 调试  无冲突;
 因为。JS代码调试 通过另开一个调试器来调试。 CS的代码通过本地的VS后台来集成调试。
 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SilverlightApplication1.Web._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    
      <script type="text/javascript">
          function onSilverlightError() {
              var k = 1;
              debugger;
 //断点             alert(k);
              window.open("http://localhost:18691/SilverlightApplication1TestPage.aspx");
        }


    </script>
</head>
<body >
    <form id="form1" runat="server">
    <div >
    <button onclick="onSilverlightError()"></button><br />
 <br />
<asp:Button ID="CCK"  runat="server" onclick="CCK_Click"  />

    </div>
    </form>
</body>
</html>
namespace SilverlightApplication1.Web
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void CCK_Click(object sender, EventArgs e)
        {


//断点            CCK.Text = "OK!";
        }
    }
}

 
 
===================================================================
3.包含silverlight的aspx文件(JS断点 和 隐藏代码断点) 与 silverlight 的Xaml。cs文件   (后台断点)  冲突
结果:Xaml。cs文件  被忽略
 Xaml。cs文件  用的是第一个  (上面 1 里的那个)
<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void ra_Click(object sender, EventArgs e)
//断点     {
        ra.Text = "cc";
    }
    
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>SilverlightApplication1</title>

    <style type="text/css">
    html, body {
	    height: 100%;
	    overflow: auto;
    }
    body {
	    padding: 0;
	    margin: 0;
    }
    #silverlightControlHost {
	    height: 100%;
	    text-align:center;
    }
    </style>
    
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript">

        function aa() {

            debugger;
//断点             alert("1");
        }
        function onSilverlightError(sender, args) {
            var appSource = "";
            if (sender != null & sender != 0) {
              appSource = sender.getHost().Source;
            }
            
            var errorType = args.ErrorType;
            var iErrorCode = args.ErrorCode;

            if (errorType == "ImageError" || errorType == "MediaError") {
              return;
            }

            var errMsg = "Silverlight 应用程序中未处理的错误 " +  appSource + "\n" ;

            errMsg += "代码: "+ iErrorCode + "    \n";
            errMsg += "类别: " + errorType + "       \n";
            errMsg += "消息: " + args.ErrorMessage + "     \n";

            if (errorType == "ParserError") {
                errMsg += "文件: " + args.xamlFile + "     \n";
                errMsg += "行: " + args.lineNumber + "     \n";
                errMsg += "位置: " + args.charPosition + "     \n";
            }
            else if (errorType == "RuntimeError") {           
                if (args.lineNumber != 0) {
                    errMsg += "行: " + args.lineNumber + "     \n";
                    errMsg += "位置: " +  args.charPosition + "     \n";
                }
                errMsg += "方法名称: " + args.methodName + "     \n";
            }

            throw new Error(errMsg);
        }
    </script>
</head>

<body>
  <form id="form1" runat="server" style="height:100%;">
   <asp:Button ID="ra" runat="server" onclick="ra_Click" />
  <button onclick="aa()"></button>
      <div id="silverlightControlHost">
		  <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="50%" height="50%">
			  <param name="source" value="ClientBin/SilverlightApplication1.xap"/>
			  <param name="onerror" value="onSilverlightError" />
			  <param name="background" value="white" />
			  <param name="minRuntimeVersion" value="3.0.40624.0" />
			  <param name="autoUpgrade" value="true" />
			  <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration: none;">
     			  <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="获取 Microsoft Silverlight" style="border-style: none"/>
			  </a>
		  </object><iframe id="_sl_historyFrame" style='visibility:hidden;height:0;width:0;border:0px'></iframe></div>
		 
		  
  </form>
</body>
</html>(&)
 结果:runat的断点响应了。JS的断点响应了
 
记录生活、工作、学习点滴!
E-Mail:mahaisong@hotmail.com 欢迎大家讨论。
沐海博客园,我有一颗,卓越的心!