我有一个User
类:
public class User
{
public string Name { get; set; }
public string Family { get; set; }
public string Type { get; set; }
}
Program.cs
文件:
public static void Main()
{
try
{
List<User> users = new List<User>();
users.Add(new User
{
Family = "Zamani",
Name = "Farhad",
Type = "ADY"
});
DoSomething(users);
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
public static void DoSomething(List<User> users)
{
var adult = users.Where(a => // line 36
a.Name.ToUpperInvariant() == "Farhad".ToUpperInvariant()
&& a.Family.ToUpperInvariant() == "zam".ToUpperInvariant()
).FirstOrDefault();
(string name, string type) = GetPassengerInfo(GetType(adult.Type), "farhad");//line 41
}
private static (string name, string type) GetPassengerInfo(string v, string d)
{
return (v, d);
}
static string GetType(string type)
{
string result = string.Empty;
switch (type)
{
case "ADT":
result = "Adult";
break;
}
return result;
}
当我在调试模式下运行程序时,Stacktrace
的异常显示Line:41
,它是确定的。
但是当我以Release模式运行项目时,我得到了Stacktrace
中的不同代码行。
在释放模式下,它显示Line:36
。
为什么?为什么?
2条答案
按热度按时间jexiocij1#
为什么?为什么?
因为在发布模式下,优化器可以内联函数,并执行其他操作来更改源代码中的实际行号。
仅仅输出堆栈跟踪可能没有帮助(恕我直言)。你得到了什么类型的异常?错误消息是什么?它来自什么方法?根据我的经验,这些对诊断问题更有帮助。我会将你的异常处理更改为至少
Console.WriteLine(ex)
。这将给予你所有的数据 * 加上 * 堆栈跟踪。link可能会有帮助。
o2g1uqev2#
您可以禁用优化,但仍然使用
Release
构建。(此屏幕截图是在关闭它之后)。https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/code-generation
如何判断这在你的公司/环境中是否可以接受?
只要记住把它切换回来,再根据你的情况。