【问题标题】:Problem with Visual Studio 2008 DebuggerVisual Studio 2008 调试器的问题
【发布时间】:2009-02-02 09:43:28
【问题描述】:

在我的一个项目中,Visual Studio 2008 出现了一个奇怪的问题。当我在一行代码上设置断点时,它会正常运行,但是当我尝试“跳过”或其他任何应该越过该断点并在下一行停止的东西时,代码就会被执行并继续,好像我按 F5 一样。即使我在这一行之后有另一个断点,也会发生这种情况,奇怪的是,第二个断点被忽略(有时)。

任何人,有什么想法吗?

更新

这是一个示例代码。但似乎在我有一个抛出异常的 try...catch 块的任何地方,我都有这个问题。

在以下代码示例中“return (T)bFormatter.Deserialize(mStream)”会引发异常。

public static T LoadEncryptedObject<T>(string location) where T : class
{
    if( string.IsNullOrEmpty(location) || !System.IO.File.Exists(location) )
        return default(T);

    System.IO.FileStream fs = null;
    try
    {
        fs = new System.IO.FileStream(location, System.IO.FileMode.Open,
            System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
        BinaryFormatter bFormatter = new BinaryFormatter();

        byte[] encryptedBytes = new byte[fs.Length];
        fs.Read(encryptedBytes, 0, encryptedBytes.Length);
        MemoryStream mStream = new MemoryStream(Cryptography.Decrypt(encryptedBytes));

        return (T)bFormatter.Deserialize(mStream);
    }
    catch( SerializationException sx )
    {
        System.Diagnostics.Debug.WriteLine(sx.Message);
        return default(T);
    }
    finally
    {
        if( fs != null )
            fs.Close();
    }
}

【问题讨论】:

  • 你能提供那个“bug”的截图吗(你可以使用JING:jingproject.com
  • 什么类型的代码?赢表格?网络表格? wpf?控制台?
  • 那么你是说如果你在 System.Diagnostics.Debug.WriteLine(sx.Message);行,那个断点永远不会被命中?
  • 没有。如果我在例如“fa = new ...”上放置一个断点,它将命中,但是当我跨过 (F10) 时,它将跳转到“return (T)bFormatter.Deserialize(mStream)”行,这将抛出一个例外。
  • 奇怪。您是否尝试过构建-> 重建解决方案?几乎听起来 pdb 文件已经过时了......

标签: visual-studio-2008 debugging


【解决方案1】:

VS2008 的已知问题。补丁可用here

【讨论】:

    【解决方案2】:

    这通常是由于未捕获的异常。尝试在 IDE 中捕获所有异常。

    在菜单栏上点击Debug->Exceptions...并选中Common Language Runtime Exceptions的“Thrown”复选框。

    【讨论】:

    • 问题其实与异常有关,但问题是,我使用 try...catch 块捕获了抛出的异常,但代码行仍然被忽略。
    • 那么这将很难追踪。正如 balexandre 在对您的问题的评论中所说,尝试使用 Jing jingproject.com 上传截屏视频。
    【解决方案3】:

    Cryptography.Decrypt 是 COM Encryption Provider 框架的包装器吗?每当您评估在 COM 中实现的某些东西时,您都会遇到一些不寻常的线程问题,这些问题听起来与您所描述的相似。

    很多时候对我有帮助的是关闭手表、汽车和本地窗口,然后非常小心不要将鼠标悬停在任何东西上以避免触发调试器评估。

    【讨论】:

      【解决方案4】:

      我的怀疑是,当您在断点处暂停时,另一个线程上会发生异常。当您跨步时,异常优先,调试器跳转到该线程。

      简单的解决方案是确保您只调试一个线程。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题。这是因为我的应用程序正在使用另一个应用程序,即 Dbmonitor 来跟踪数据库事件,但我在调试时没有运行 Dbmonitor。所以检查你是否添加任何代码来使用任何第三方应用程序。这可能会帮助你:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-20
          • 1970-01-01
          • 2020-12-20
          • 1970-01-01
          相关资源
          最近更新 更多