【发布时间】:2010-10-26 13:21:01
【问题描述】:
IDE = VS7 或 2002
大家好,我有一个非常奇怪的问题。代码似乎没有按预期执行。我正在通过调试器运行它,它的表现真的很奇怪。
我已确定虚拟目录使用的是 ASP.NET 1.0.3705。
代码如下,我解释了调试器显示的 cmets 中的执行步骤:
try
{
objConnection.Open(); // STARTS HERE
objCommand.ExecuteNonQuery(); // DOES NOT THROW EXCEPTION
int c = 0; // THIS LINE IS EXECUTED
}
catch (SqlException sqle)
{
LogError(); // THIS LINE IS NOT EXECUTED
throw sqle; // THIS LINE IS EXECUTED AFTER THE int c = 0;
// sqle IS NULL
// EXCEPTION IS NOT CAUGHT AND
// EXECUTION CONTINUES IN FINALLY BLOCK
}
finally
{
// EXECUTES AS EXPECTED FROM HERE ON OUT,
// AS THOUGH THE throw sqle; DID NOT HAPPEN.
if (objConnection.State == ConnectionState.Open) objConnection.Close();
}
以前有没有人经历过这种奇怪的行为?知道如何解决吗?我可能会广泛地改变方法,但我仍然想知道为什么会这样。
我怀疑由于 sqle 为 null,这就是 throw 未按预期运行的原因。但是为什么我们一开始就跳进了这个代码块呢?
我已经多次重新加载它,保存并重建,并使用调试器执行并多次观察此行为。
感谢大家的帮助!
一切顺利,
格雷厄姆
【问题讨论】:
-
itsmatt 和 David,据我所知,问题出在调试器上。我按照大卫的建议使用 Debug.WriteLine()。我有另一段代码遇到了类似的问题。应该发生异常但没有发生。调试器查看了 if 语句并决定它应该在其中运行代码 - 这应该会导致异常。查看 WriteLine 语句,我可以看到 if 语句中的代码块实际上并未运行。调试器认为代码将如何执行与它实际执行的方式之间存在差异。感谢您的帮助
-
很高兴听到这个消息。听起来调试器正在查看的已编译程序集比源代码旧。您可以尝试删除 /bin 文件夹并再次重建项目。