为什么Visual Studio在调试时会将我放入反汇编窗口?

时间:2011-08-19 11:45:52

标签: visual-studio debugging

我正在调试程序时遇到一个奇怪的问题。

我开发了一个工作正常的程序。即使我在代码的一部分做了一个小改动(添加了一个硬编码语句而不是监视一个变量并改变它的值),它仍然可以正常工作。但后来我删除了这些更改,从那时起,程序的表现非常奇怪。硬编码的变量仍然保留硬编码值,而不是根据流量应该具有的值。

我用语句

更改了第24行
return "shweta@2k7.com";

并再次恢复更改以使其与上一个更相似,只是我删除了一个空白行。因此,当前代码中的总行数比前面的代码少1,如下所示。

现在当我调试它时,控件上升到第26行,即使没有任何内容写入,它返回前一个值“shweta@2k7.com”(代码中没有出现),而不是“ ”

当前代码:

 1 public string GetUserEmail(string userName)
 2 {
 3
 4    if (!UserExists(userName)) return "";
 5    try
 6    {
 7      DirectorySearcher search = new DirectorySearcher(_directoryEntry);
 8      search.Filter = "(SAMAccountName=" + userName + ")";
 9      search.PropertiesToLoad.Add("mail");
 .       .
 .       .
 .       .
19    }
21    catch
22    {
23      return "";  //"username@domain.com";
24    }
25  }

以前的代码

 1 public string GetUserEmail(string userName)
 2 {
 3   if (!UserExists(userName)) return "";
 4   try
 5   {
 6     DirectorySearcher search = new DirectorySearcher(_directoryEntry);
 7     search.Filter = "(SAMAccountName=" + userName + ")";
 8     search.PropertiesToLoad.Add("mail");
 .      .
 .      .
 .      .
18   }
22   catch
23   {
24     return "username@domain.com";      //line number 24
25   }
26 }

从此函数返回后,控件将传递到Disassembly窗口,其中显示一些汇编代码。

为什么会这样?


是的,你是对的,它正在运行旧版本。

我正在使用Visual Studio 2008.我在构建/重建之前做了所有这些事情,比如清理解决方案。但没有收获。

我知道catch内部的行只有在try块失败时执行,但这里的场景不同(令人困惑)。它不是在尝试失败还是成功,它只是看行号。因为当第26行没有任何内容时,那么也可以控制它。

我尝试在26处删除空白行,然后控制转到第27行(删除空行后26)。知道第27行有评论你会想知道! 但是我已经从SVN签出了最后一个安全版本,并且工作正常。

但我也很想知道这件事。

1 个答案:

答案 0 :(得分:0)

Shweta,

第24行位于catch语句内,仅在try()失败时执行。 try()是否可能成功,因此第24行永远不会执行?

第二个想法,这就像是没有运行你正在运行的代码的情况:你的新资源可能没有正确编译,所以你仍然是运行旧版本?如果您正在使用IDE(或一个好的makefile),您可以尝试运行clean,或者手动删除对象和可执行文件,然后从头开始重建。

当您发现问题时,请发布后续信息。我很好奇!

祝你好运。