我正在调试程序时遇到一个奇怪的问题。
我开发了一个工作正常的程序。即使我在代码的一部分做了一个小改动(添加了一个硬编码语句而不是监视一个变量并改变它的值),它仍然可以正常工作。但后来我删除了这些更改,从那时起,程序的表现非常奇怪。硬编码的变量仍然保留硬编码值,而不是根据流量应该具有的值。
我用语句
更改了第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签出了最后一个安全版本,并且工作正常。
但我也很想知道这件事。
答案 0 :(得分:0)
Shweta,
第24行位于catch
语句内,仅在try()
失败时执行。 try()
是否可能成功,因此第24行永远不会执行?
第二个想法,这就像是没有运行你正在运行的代码的情况:你的新资源可能没有正确编译,所以你仍然是运行旧版本?如果您正在使用IDE(或一个好的makefile),您可以尝试运行clean
,或者手动删除对象和可执行文件,然后从头开始重建。
当您发现问题时,请发布后续信息。我很好奇!
祝你好运。