如何在Visual Studio 2010中更快地调试ASP.NET应用程序

6
我对调试感到非常沮丧,可能是我做错了。在积极开发时,编写一些代码,启动调试器测试该代码,等待一分钟以启动调试器,查看浏览器中的页面,停止调试器,编辑代码,反复洗涤,漂洗,重复,这一切都非常麻烦。我可以通过在开发过程中使用CTRL-F5和CTRL-SHIFT-B来解决这个问题,但我失去了调试器的所有优势。有没有更好的方法来使用调试器,或者其他我可以做到快速重建和使用调试器的方法?谢谢,Kyle。P.S. 我们确实编写单元测试,但您还需要在浏览器中测试应用程序,因此请不要发表“如果编写了正确的单元测试,则不应该出现此问题”的评论 ;)。更新:感谢提供“获取更好的机器”的建议。我无能为力。大量RAM和Intel SSD。我不应该需要超过$2500的机器来编写Web应用程序。
5个回答

5

少调试几次:如果你在停止调试器来改变值或测试不同的场景,那就不要这样做。在调试时,你可以使用QuickWatchImmediate Window更改变量的值。

降低调试成本:关闭批处理将使您的页面在第一次加载时加载更快,因为它将不再预编译所有页面和用户控件。如果你经常进行更改,这对开发来说是很好的。

<compilation ... batch="false"> ...</compilation>

通过使用QuickWatch或即时窗口更改值,然后将箭头从当前位置移回到开头或断点处,这是您重新测试而无需退出和重新启动调试编译的方法。这里的好处是等待时间更少。如果代码存在灾难性问题,则仍需要退出并编辑它,但这对于快速查找错误并进行最少数量的构建足够了。 - hyprsleepy
我完全同意所有观点,即时窗口特别有用,经常被忽视。 - GrowlingDog
web.config的更改对于调试和频繁更改非常有用,因为这样就不会因为第一次加载缓慢而惩罚你。你知道在构建后第一次打开网站需要很长时间,但下一次就很快了吗?那是因为第一次正在进行批处理。将批处理设置为false意味着它不必做所有那些额外的工作。尝试一下,看看它能节省多少时间。 - hyprsleepy

5

你应该看一下 Scott Guthrie 推文中提到的这篇文章:

不费吹灰之力缩短 ASP.NET 编译/加载时间 http://blog.lavablast.com/post/2010/12/01/Slash-your-ASPNET-compileload-time.aspx

摘要

  1. 升级硬件(影响最大)
  2. 将临时 IIS 文件存储在最快的硬盘或 RAM 磁盘上,例如: <compilation ... tempDirectory="q:\temp\iistemp\"> ... </compilation>
  3. 重组你的项目
    • 有选择地构建必要的项目
  4. 检查一些神奇的设置(影响最大)

3

购买固态硬盘和大量的内存。


都拿到了,但“boat-loads”有点含糊不清 :) - Kyle West
最少需要6 GB的内存。这通常意味着使用64位系统,此时您还应该为任何数据库工作使用64位SQL Server。我发现它比32位版本要快得多。 - Marcelo Cantos
这正是我所拥有的。机器只有一年左右的时间。其他所有东西都飞快,但我在电脑上使用的应用程序却有点慢。真是让人费解。 - Kyle West
那么就有问题了。在那种硬件上,一分钟的加载时间是荒谬的。也许@Fabian的链接会有所帮助。过去我曾经通过将代码和临时目录移动到RAM磁盘上看到了巨大的改进,但通常这需要太多的努力,而我现在处理的代码在类似于你的硬件上运行良好。也许你必须采取极端措施。 - Marcelo Cantos

2
也许你需要的不是更快地调试,而是减少需要调试的次数。也许采用更自由的Debug.*或跟踪日志记录方法会有所帮助。
@Kyle West - 嗯...你可以采取很多不同的方法。对我来说最好的方法是使用MS Enterprise Library Logging应用程序块(主站)将事件记录到滚动日志文件中。可以通过编辑.config文件来调整日志级别(详细信息或仅限异常)。
应用程序块中有很多内容,因此我们创建了一个包装器来更轻松地进行重要的调用。例如,
DebugEvent.Log(String.Format("the value of _myVariable is {0}", _myVariable))
InfoEvent.Log("Reached the entry to the gatesOfHell method")
ExceptionEvent.Log(ex)

EL的好处在于您可以更改配置而无需更改代码。因此,如果您想记录到事件日志甚至电子邮件中,只需要几行配置即可。
您还可以替换任何其他记录器(log4Net等),或者以对您有用的方式使用内置的DebugTrace
语句“实际上我只想看到不会影响UI的任何异常。”有点令人担忧,并暗示着可能发生了异常吞噬或类似的不良实践。(这是一个完全不同的问题,也许是您必须经常进行调试的原因)。

你能解释一下或提供一个链接吗?我非常支持任何更轻量级的东西。实际上,我只想看到不会使用户界面混乱的任何异常情况。 - Kyle West
谢谢,我们正在使用Log4Net,并且我在ApplicationOnError中编写了一些代码,将它们记录到本地滚动文件中。不过,当异常很长时,查看文件有点麻烦。 - Kyle West
关于异常处理,我们尽力避免它,但总有一些问题会逃脱我们的注意。我现在正在处理的问题很难找到,因为框架(一个是MVC,另一个是NHibernate)本身就会吞噬异常(并防止其被记录)。一旦我们知道了发生了什么,修复起来就很容易了,但在那之前,我们一直在痛苦地想着到底出了什么问题。 - Kyle West
@Kyle West - 如果查看异常是个问题的话,你可以改变它们的格式,并确保使用像UltraEdit这样更好地处理大文件格式的工具。 - StingyJack

0

嗯,有像Watin这样的工具,可以让你编写浏览器交互脚本,但我认为那并不是你想要的。

我猜答案在于“购买一台更快的机器”...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接