【发布时间】:2011-08-19 11:45:51
【问题描述】:
我在调试程序时遇到了一个奇怪的问题。
我开发了一个运行良好的程序。即使我在代码的一部分中进行了微小的更改(添加了一个硬编码语句而不是监视变量并更改其值),它仍然可以正常工作。但后来我删除了这些更改,从那时起,程序的行为就变得非常奇怪。硬编码的变量仍然保留硬编码的值,而不是根据流程应该具有的值。
我用语句更改了第 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 }
从这个函数返回后,控制传递到显示一些汇编代码的反汇编窗口。
为什么会这样?
是的,您是正确的,它正在运行旧版本。
我使用的是 Visual Studio 2008。我在构建/重建之前做了所有这些事情,比如清洁解决方案。但没有收获。
我知道 catch 中的行只有在 try 块失败时才会执行,但这里的情况不同(也很混乱)。它不是查看尝试失败还是成功,它只是查看行号。因为当第 26 行没有任何内容时,控制也将转到那里。
我尝试删除第 26 行的空白行,然后控制转到第 27 行(删除空白行后的第 26 行)。你会想知道第 27 行有评论! 不过,我已经从 SVN 签出了最后一个安全版本,效果很好。
但我也很想知道这一点。
【问题讨论】:
-
您的更新让我更加确信某些东西(符号表,也许还有更多)没有被重建,因为对源代码的更改不会反映在调试器中。