Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象引用未设置为对象的实例:堆栈跟踪显示错误的行号_C#_Asp.net - Fatal编程技术网

C# 对象引用未设置为对象的实例:堆栈跟踪显示错误的行号

C# 对象引用未设置为对象的实例:堆栈跟踪显示错误的行号,c#,asp.net,C#,Asp.net,我已经解决了这个问题(解释如下),但我正在试图找出堆栈跟踪给我错误行的原因 概述: 这是一个复读控件,允许教授在查看整个考试的同时,每次批改一个问题 基本思想(pseudo.aspx): 我已将.aspx中的字段从标签更改为aspx中的隐藏字段,但忘记在.aspx.cs文件中更改它们--这是错误的实际原因 但是,堆栈跟踪(customerrors=“Off”)显示对象引用未设置为type Object,发生在此行: LinkButton=(LinkButton)发送方//对象未在此处设置错误 但

我已经解决了这个问题(解释如下),但我正在试图找出堆栈跟踪给我错误行的原因

概述: 这是一个复读控件,允许教授在查看整个考试的同时,每次批改一个问题

基本思想(pseudo.aspx):

我已将.aspx中的字段从标签更改为aspx中的隐藏字段,但忘记在.aspx.cs文件中更改它们--这是错误的实际原因

但是,堆栈跟踪(customerrors=“Off”)显示对象引用未设置为type Object,发生在此行:

LinkButton=(LinkButton)发送方//对象未在此处设置错误

但实际的误差在下面几行

因此,我的疏忽花了很长时间才得以纠正。您可以看到,我逐行中断了RepeaterItem的检索,并在每一行尝试找出它之后放置了一个
抛出新异常(xxx.GetType().ToString()
),以检查引用的有效性。有趣的是,当手动向下抛出时,原始错误没有出现


为什么堆栈跟踪显示异常来自代码中的错误位置?

堆栈跟踪中的行号可能错误的原因有很多。以下是几个原因:

  • 您在编译程序后编辑了代码。现在源代码行号和正在运行的代码不匹配
  • 您正在运行程序的优化版本。优化可能会导致行号报告不正确
  • 您使用IL注入工具修改了编译后的代码,现在生成的代码与调试信息不匹配。这可能会导致报告行号错误

基本上,有三件事:源代码、生成的IL代码和包含描述源代码和IL之间关系的调试信息的PDB。如果其中任何一件由于任何原因不匹配,则它们彼此不匹配,,因此您可以观察到它们彼此不匹配。

T以下是堆栈跟踪中的行号可能错误的许多原因。以下是一些原因:

  • 您在编译程序后编辑了代码。现在源代码行号和正在运行的代码不匹配
  • 您正在运行程序的优化版本。优化可能会导致行号报告不正确
  • 您使用IL注入工具修改了编译后的代码,现在生成的代码与调试信息不匹配。这可能会导致报告行号错误

基本上,有三件事:源代码、生成的IL代码和包含描述源代码和IL之间关系的调试信息的PDB。如果其中任何一件因任何原因不匹配,则它们彼此不匹配,,因此您可以观察到它们彼此不匹配。

Similar(不确定是否重复)?在紧急情况下,您可以使用预处理器指令强制异常以您想要的方式记录行号。类似(不确定是否重复)?在紧急情况下,您可以使用预处理器指令强制异常以您想要的方式记录行号。问题是,如果我放入调试“抛出新异常(xxx.GetType().ToString()“在实际错误所在的行上方,正确报告了行号。1和3肯定不适用,而且由于我还在早期开发中,我还没有启用优化。问题是,如果我放置调试“抛出新异常(xxx.GetType().ToString()”在实际错误所在的行上方,正确报告了行号。1和3肯定不适用,而且由于我还在早期开发中,我还没有启用优化。
<asp:repeater>
    <ItemTemplate>
    <fields/>
    <textbox id="grade">
    <asp:LinkButton ID="UpdateButton" runat="server" Text="Update" OnClick="OnUpdate" />
    </ItemTemplate>
</asp:repeater>
protected void OnUpdate(object sender, EventArgs e)
{  // I broke this down line by line trying to trace the error. 
   LinkButton button = (LinkButton)sender; //Object Not set exception here!!! 
   object o = button.Parent;
   RepeaterItem item = o as RepeaterItem;
   int StudentID = int.Parse((item.FindControl("StudentKeyLabel1") as HiddenField).Value);
   string ExamID = (item.FindControl("ExamIDLabel1") as HiddenField).Value.Trim();
   int QuestionID = int.Parse((item.FindControl("QuestionIDLabel1") as HiddenField).Value);
   int Grade;
   try
   {
       Grade = int.Parse((item.FindControl("GradeTextBox") as TextBox).Text);
       // Update DB
   }
   catch (FormatException)
   { // Message to user - bad or missing grade }
   //Custom Databind
}