<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>简单生活 -- Kevin Yang的博客 &#187; Silverlight无法调试</title>
	<atom:link href="http://www.imkevinyang.com/tags/silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95/feed" rel="self" type="application/rss+xml" />
	<link>http://www.imkevinyang.com</link>
	<description>It&#039;s all about sharing</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:37:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>解决Silverlight无法调试的问题</title>
		<link>http://www.imkevinyang.com/2009/09/%e8%a7%a3%e5%86%b3silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95%e7%9a%84%e9%97%ae%e9%a2%98.html</link>
		<comments>http://www.imkevinyang.com/2009/09/%e8%a7%a3%e5%86%b3silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95%e7%9a%84%e9%97%ae%e9%a2%98.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 06:26:00 +0000</pubDate>
		<dc:creator>Kevin Yang</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[疑难杂症]]></category>
		<category><![CDATA[Silverlight无法调试]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[调试]]></category>

		<guid isPermaLink="false">http://www.imkevinyang.com/2009/08/%e8%a7%a3%e5%86%b3silverlight%e8%b0%83%e8%af%95%e7%8a%b6%e6%80%81%e4%b8%8b%e6%97%a0%e6%b3%95%e8%b7%9f%e8%bf%9b%e6%96%ad%e7%82%b9%e7%9a%84%e9%97%ae%e9%a2%98.html</guid>
		<description><![CDATA[问题描述
<p>在Silverlight开发过程中，经常时不时的会碰到Silverlight无法调试的问题。我就遇到下面几种情况：</p>
<p>1. Web Application+Silverlight，F5进入调试状态之后无法跟进Silverlight程序中下的断点</p>
<p>2. 项目中有两个Silverlight工程，其中一个Si&#8230;</p>]]></description>
			<content:encoded><![CDATA[<h2>问题描述</h2>
<p>在Silverlight开发过程中，经常时不时的会碰到Silverlight无法调试的问题。我就遇到下面几种情况：</p>
<p>1. Web Application+Silverlight，F5进入调试状态之后无法跟进Silverlight程序中下的断点</p>
<p>2. 项目中有两个Silverlight工程，其中一个Silverlight程序中有一个鼠标点击事件会将当前页面导航到另外一个Silverlight程序的承载页面。第一个Silverlight程序断点正常，但是第二个Silverlight程序中的断点不能自动停下来</p>
<p>3. 无论是在TestPage模式下调试还是在Web工程上调试，只要打开了Silverlight调试开关，那么启动的时候会提示“<strong><font color="#008000">Unable to start debugging. Cannot locate Microsoft Internet Explorer</font></strong>”。如果你是直接Ctrl+F5运行，有时候也会出现一样的问题。</p>
<h2>单个Silverlight工程无法调试</h2>
<p>对于第一个问题，请检查如下设置是否正确：</p>
<p>1. <strong><font color="#008000">确认启用了Silverlight调试</font></strong>。双击Asp.Net工程中的属性文件夹打开属性设置页，找到Web一栏，在此页卡的最下面有几个调试选项，如下图所示：</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/08/image_thumb5.png" width="166" height="116" /> <img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/08/image_thumb6.png" width="511" height="42" /></p>
<p>确认最后一项“Silverlight”之前的勾是勾上的。</p>
<p>2. <strong><font color="#008000">确保浏览器访问的Xap包是最新的</font></strong>。检查IE是否已经清除了缓存，或者ClientBin中的Xap因为某些原因没能更新（如因配置管理导致无法覆盖）</p>
<p>3. <strong><font color="#008000">检查Asp.Net工程是否绑定了Silverlight应用</font></strong>。可以通过asp.net工程的属性面板中的Silverlight Application页卡查看是否绑定成功。如下：</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Silverlight Applications Settings" border="0" alt="Silverlight Applications Settings" src="http://www.imkevinyang.com/wp-content/uploads/2009/09/image_thumb.png" width="331" height="204" /></p>
<p>4. <strong><font color="#008000">检查Silverlight工程的StartupObject是否设置正确</font></strong>。有时候我们对工程的命名空间进行重命名，会导致Silverlight应用程序的入口对象失效，从而导致无法启动等情况。</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Silverlight Application Startup Object" border="0" alt="Silverlight Application Startup Object" src="http://www.imkevinyang.com/wp-content/uploads/2009/09/image_thumb1.png" width="453" height="131" /></p>
<h2>IE8下无法同时调试多个Silverlight工程？！</h2>
<p>IE8和以往的IE不大一样，它的多标签是采用多进程的方式来实现的。整个窗口是一个框架进程，每个Tab标签页是一个独立的子进程（实际上，IE8会根据内存动态控制Tab进程的数目，因此多个标签页可能会共存于同一个进程之中）。当你尝试在多个标签页中打开不同的Silverlight应用程序时，例如从SilverlightApplication1中打开新页面到SilverlightApplication2页面，这个时候你会发现，SilverlightApplication2应用程序无法调试。</p>
<p>这是因为，<strong><font color="#008000">Visual Studio除了启动窗口进程之外，不会自动帮我们Attach其他的包含Silverlight应用程序的进程，如果我们需要在多个标签页（或者多个窗口）中同时调试不同的Silverlight应用程序，那么我们必须自己手动Attach这些进程</font></strong>。</p>
<p>举个简单的例子，我有两个Silverlight工程，其中SilverlightApplication1中包含链接指向SilverlightApplication2页面，点击链接会在新标签页中打开SilverlightApplication2的承载页面。</p>
<p>为了Attach相应的进程，首先我们需要找到SilverlightApplication2承载页面对应的进程。打开ProcessExplorer，我们可以看到三个进程。</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/09/image_thumb2.png" width="232" height="59" /></p>
<p>其中的ID为4528的是父进程，也就是框架进程，用于管理不同的标签进程之间的通信等事务。5160和5248分别对应着两个标签页进程。至于哪个对应哪个我们在这里无法根据进程号确定。</p>
<p>我们再打开Visual Studio中的Attach窗口（菜单=&gt;Debug=&gt;Attach to process…）</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/09/image_thumb3.png" width="510" height="185" /></p>
<p>这里列出了所有系统可用的进程清单，我们可以看到三个IE进程，其中一个是灰色的，这表示了这个进程已经被Attach到Visual Studio的调试器上了。排除了框架进程4258外，就剩下5248这个进程了，这个进程就是我们要找的SilverlightApplication2对应的承载页面的进程了。选中之后Attach到调试器上，我们发现，SilverlightApplication2中的断点还是显示为空心红圈，依然无法调试。</p>
<p>这是因为我们指定的进程代码类型不正确。我们注意到，上图中最上面有一个Attach to，后面显示的是Automatic，这个代表着Visual Studio的调试器会自动帮我们选择进程的调试类型，例如是托管代码调试，还是脚本调试，等等。我们选中5248这个进程，发现Visual Studio给我们选择的方式是脚本调试。</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/09/image_thumb4.png" width="504" height="144" /></p>
<p>在Visual Studio中，脚本调试和Silverlight调试是不能共存的，这也就是为什么有时候你按下F5的时候，Visual Studio会提示你，调试Silverlight程序会暂时关闭脚本调试的功能。因此在脚本调试下，我们无法跟进Silverlight应用程序的断点。</p>
<p>这里额外说一点，IE8高级选项中的禁用脚本调试设置对Visual Studio一点影响都没有，因为Visual Studio 2008在调试器启动的时候会自动启用脚本调试（可以通过注册表禁用此特性），除非在Web Application属性中打开了Silverlight调试。</p>
<p>回到刚才的问题，由于Visual Studio帮我们自动选择的调试类型有误，导致我们无法调试SilverlightApplication2，因此我们需要手动指定Attach类型。点击Attach to后侧的select按钮。</p>
<p><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/09/image_thumb5.png" width="308" height="211" /></p>
<p>在弹出的选择代码类型窗口中勾选上Silverlight。确定之后再次Attach，我们发现，这一次，断点真的起作用了。</p>
<p>当然，如果这种方式比较麻烦的话，我们也可以通过改变IE8的Tab进程创建方式来让不同标签页共存于一个进程中。在注册表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下面有一个TabProcGrowth键值（DWORD类型），当其设置为0时， IE框架和Tab工作在一个进程里面，Tab采用线程的方式创建，同时IE的保护模式（Protect Mode）会关闭。TabProcGrowth=1时IE框架和Tab工作在不同的进程里面。TabProcGrowth&gt;1时，此值将决定IE8最多创建的Tab进程数目。如果TabProcGrowth 不存在，则会根据可用的物理内存数量决定Tab进程的数量。</p>
<h2>调试时无法打开IE窗口的问题</h2>
<p>这个问题是我最近才遇到的，我也不知道为什么突然之间，我的Silverlight工程按下F5的时候无法调试，弹出下面这个对话框：Unable to start debugging. Cannot locate Microsoft Internet Explorer.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/12/image_thumb15.png" width="248" height="141" /> </p>
<p>如果直接运行，那么能够打开，但是打开之后Visual Studio还是会弹出一样的错误。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/12/image_thumb16.png" width="257" height="134" /> </p>
<p>这个问题折腾了我半天，我尝试了重启电脑，重装Silverlight Tools，新建干净的测试工程，修改系统和Visual Studio的默认浏览器（注意，系统和Visual Studio的默认浏览器是独立设置的）均以失败告终。Google了很久，Silverlight官方论坛上倒是有不少帖子和这个相关的，但我细细看了之后发现没有一个回帖能够解决我的问题的。有个发帖的家伙问题是解决了，但是不把怎么解决的说一下就跑了，强烈bs一下这种人！</p>
<p>话说回来，我最后是怎么解决这个问题的呢，是用了Process Monitor这个小工具（微软Sysinternal荣誉出品！）。之前有一次asp.net网站的GlobalError里头出现了一个“文件不存在”的HTTPException，查了半天没查出来，后来使用这个工具监视了一下WebDevServ.exe进程之后发现该进程尝试去访问某个不存在的文件。</p>
<blockquote><p>Process Monitor，可以监控当前系统中所有进程的活动，包括对文件系统的操作，读写注册表，网络访问以及线程活动等等，非常实用的调试维护工具。</p>
</blockquote>
<p>我打开这个工具，选择监视进程为devenv.exe。在Visual Studio中F5开始调试，立即弹出出错对话框，OK，把PM暂停一下，否则条目太多了。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/12/image_thumb17.png" width="298" height="98" /> </p>
<p>但是事件条目还是太多了，所以我把Result为SUCCESS的条目过滤掉，因为我们只关注那些失败的条目。</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/12/image_thumb18.png" width="271" height="171" /> </p>
<p>然后对日志条目进行细致的排查，终于发现了问题根源：</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/12/image_thumb19.png" width="546" height="45" /> </p>
<p>原来Visual Studio在调试或者运行的时候会去读取注册表中的HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\iexplore.exe项，然后读取不到，因而才报那个错误。难怪提示Cannot locate Microsoft internet explorer呢。</p>
<p>我打开regedit注册表编辑器，找到这个路径，然后把缺失的项加上去，重新回到Visual Studio中F5，终于可以了，内牛满面~</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/12/image_thumb20.png" width="330" height="156" /> </p>
<p>希望我的解决方法能够给你一些启发，以后遇到类似莫名其妙的问题，可以想到使用PM这个工具去排查问题。</p>
<p><font color="#ff0000">update</font>: 更新了新的症状（F5调试的时候弹出cannot locate microsoft internet explorer的对话框）的解决办法。</p>
<p align="right">——<a href="http://www.imkevinyang.com/"><em><strong>Kevin Yang</strong></em></a></p>

	标签：<a href="http://www.imkevinyang.com/categories/techarticles/silverlight" title="Silverlight" rel="tag">Silverlight</a>, <a href="http://www.imkevinyang.com/tags/silverlight" title="Silverlight" rel="tag">Silverlight</a>, <a href="http://www.imkevinyang.com/tags/silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95" title="Silverlight无法调试" rel="tag">Silverlight无法调试</a>, <a href="http://www.imkevinyang.com/tags/visual-studio" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="http://www.imkevinyang.com/categories/techarticles/knottyproblems" title="疑难杂症" rel="tag">疑难杂症</a>, <a href="http://www.imkevinyang.com/tags/%e8%b0%83%e8%af%95" title="调试" rel="tag">调试</a><br />

	<h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.imkevinyang.com/2009/09/blend%e5%b0%8f%e8%b4%b4%e5%a3%ab%e6%94%b9%e5%8f%98%e9%bc%a0%e6%a0%87%e6%bb%9a%e8%bd%ae%e7%9a%84%e9%bb%98%e8%ae%a4%e8%a1%8c%e4%b8%ba-2.html" title="Blend小贴士&mdash;&mdash;改变鼠标滚轮的默认行为 (2009/09/18)">Blend小贴士&mdash;&mdash;改变鼠标滚轮的默认行为</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/08/firebug%e5%9c%a8edithtml%e6%97%b6%e4%b8%a2%e5%a4%b1%e4%ba%8b%e4%bb%b6%e5%a4%84%e7%90%86%e5%87%bd%e6%95%b0-2.html" title="Firebug在EditHtml时丢失事件处理函数 (2009/08/19)">Firebug在EditHtml时丢失事件处理函数</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/02/silverlight-2-rtm-%e5%a4%9a%e5%9b%bd%e8%af%ad%e8%a8%80%e6%94%af%e6%8c%81%ef%bc%88%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e6%9c%ac%e5%9c%b0%e5%8c%96%ef%bc%89.html" title="Silverlight 2 RTM 多国语言支持（应用程序本地化） (2009/02/28)">Silverlight 2 RTM 多国语言支持（应用程序本地化）</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/03/silverlight-2%e5%8a%a8%e6%80%81%e5%8a%a0%e8%bd%bdxap%e5%8c%85%e4%b8%ad%e7%9a%84%e7%a8%8b%e5%ba%8f%e9%9b%86.html" title="Silverlight 2动态加载Xap包中的程序集 (2009/03/02)">Silverlight 2动态加载Xap包中的程序集</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/05/silverlight-4ria-services-%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e4%bc%98%e5%8c%96seo.html" title="Silverlight 4+RIA Services&#8211;搜索引擎优化(SEO) (2010/05/04)">Silverlight 4+RIA Services&#8211;搜索引擎优化(SEO)</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/04/silverlight-seo%ef%bc%88%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e4%bc%98%e5%8c%96%ef%bc%89%e7%99%bd%e7%9a%ae%e4%b9%a6.html" title="Silverlight SEO（搜索引擎优化）白皮书 (2009/04/06)">Silverlight SEO（搜索引擎优化）白皮书</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/03/silverlight2-%e5%8a%a8%e6%80%81%e5%8a%a0%e8%bd%bd%e7%a8%8b%e5%ba%8f%e9%9b%86-ondemand%e6%a8%a1%e5%bc%8fdynamic-load-assembly.html" title="Silverlight2 动态加载程序集&#8212;OnDemand模式(Dynamic Load Assembly) (2009/03/02)">Silverlight2 动态加载程序集&#8212;OnDemand模式(Dynamic Load Assembly)</a> </li>
	<li><a href="http://www.imkevinyang.com/2011/09/silverlight%e4%b8%ad%e6%97%a0%e6%b3%95%e8%ae%be%e7%bd%ae%e5%8d%ab%e6%98%9f%e7%a8%8b%e5%ba%8f%e9%9b%86%e4%b8%ba%e4%b8%ad%e7%ab%8b%e8%b5%84%e6%ba%90%e7%a8%8b%e5%ba%8f%e9%9b%86.html" title="Silverlight中无法设置卫星程序集为中立资源程序集 (2011/09/05)">Silverlight中无法设置卫星程序集为中立资源程序集</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/02/silverlight%e5%90%af%e7%94%a8assembly-caching%e4%b9%8b%e5%90%8e%e9%93%81%e9%80%9a%e7%94%a8%e6%88%b7%e6%97%a0%e6%b3%95%e8%ae%bf%e9%97%ae.html" title="Silverlight启用Assembly Caching之后铁通用户无法访问 (2010/02/13)">Silverlight启用Assembly Caching之后铁通用户无法访问</a> </li>
	<li><a href="http://www.imkevinyang.com/2010/03/silverlight%e7%9a%84%e4%be%9d%e8%b5%96%e5%b1%9e%e6%80%a7%e4%b8%8e%e9%99%84%e5%8a%a0%e5%b1%9e%e6%80%a7.html" title="Silverlight的依赖属性与附加属性 (2010/03/28)">Silverlight的依赖属性与附加属性</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.imkevinyang.com/2009/09/%e8%a7%a3%e5%86%b3silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95%e7%9a%84%e9%97%ae%e9%a2%98.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: www.imkevinyang.com @ 2012-02-09 10:50:15 -->
