为什么我的程序会跳过几行代码

时间:2016-12-14 21:45:00

标签: c# asp.net visual-studio

这是我的页面加载事件的一部分

protected void Page_Load(object sender, EventArgs e)
{
    string v = Request.QueryString["File"];
    string q = Request.QueryString["Quote"];
    if (v != null)
    {
        int temp;
        if (int.TryParse(v, out temp))
        {
            FileStruct fs = BlobDA.GetBlobFileStruct(temp);
            string url = FileStorage.getBlobFile(fs);
            Response.Redirect(url);
        }
    }

    if (q != null)
    {
        QuoteInfo qiQuote = Utility.getQuoteObject(int.Parse(q));
        Session.Add("Quote", qiQuote);
    }

    // CODE BELOW DOES ISN'T RUN  -----------

    QuoteInfo objQuote = (QuoteInfo)Session["Quote"];
    lstLouverStruct = objQuote.LstLouverStruct;
    structSpecs = objQuote.StructSpecs;

    structCustomer = objQuote.StructCustomer;
    structVendor = objQuote.StructVendor;

    // --------------------------------------            

    var dt = Utility.GetDatatableList(lstLouverStruct);
    var html = Utility.BuildString("Dims", dt);
    phDims.Controls.Add(new Literal { Text = html.ToString() });

注释行之间的代码未运行。

我无法在调试窗口中看到指定代码中的变量,因此它将以下代码从if (q != null)语句跳到var dt = ...

我注意到在调试页面加载q != null时,这基本上意味着传递了包含引号的查询字符串,并且我将引号发送到重新创建{{{ 1}} object,然后我将该对象添加到会话变量中。然后,在跳过的代码中,我将该对象从会话变量中取出并使用它。基本上,如果QuoteInfoq == null,那么已经存在会话变量引用,以便条件可以更改会话变量中的对象。无论如何,我在调试器中按照代码设置会话变量,然后跳过上面提到的代码。

不确定这是否相关但由于某种原因,即使我正在调试优化关闭,调试器中的所有变量似乎都已优化。

任何帮助将不胜感激

Snippit off debug panel

更新------------------

我正在使用调试模式。 My panel reads debug

无论如何构建重建和清理似乎已经解决了问题谢谢Jason

1 个答案:

答案 0 :(得分:1)

这是因为调试器正在使用的PDB实际上与正在运行的字节代码不匹配。其中一个最常见的原因是调试发布版本,正如评论所提到的那样。其他问题包括被引用的旧/ stale dll以及未被清理的旧pdb文件。尝试以下每个修复程序(按严重性顺序):

  1. 运行调试版本
  2. 构建>重建
  3. 构建>清洁
  4. 手动删除所有生成的PDB文件。
  5. 删除整个目录并再次检出(假设您正在使用源代码管理)