当前上下文中不存在名称为'$exception'的变量。

11

今天我在工作中调试一个应用程序。我在其中一个catch块中设置断点,以便更详细地检查异常。

“查看详细信息”模态窗口正常打开,但它没有显示异常的详细信息,反而抛出了一个奇怪的错误,我从未遇到过,也不知道它的含义:

View Details Exception

错误提示如下:

当前上下文中不存在名称'$exception'

这很令人沮丧,因为我在catch块作用域内,所以应该能够看到我的异常。

重新启动应用程序后,我设法成功调试了它。这是我(到目前为止)唯一一次遇到这个错误。

有人知道这是什么意思,以及如何修复它(而不必重新启动应用程序)吗?

注意:我使用的是Visual Studio 2012 Premium。版本 11.0.61030.00 Update 4


$exception 看起来像是 JavaScript 中的东西,C# 中不会在前面加上 $。你能验证一下你的 JS 文件是否是抛出错误的原因吗? - Ron Beyer
5
$exception是用于调试器的特殊指令,表示"当前异常"。有时候,由于某些原因,这个指令会出现一些错误,导致调试器停止工作。这种情况并不罕见。 - CodeCaster
@CodeCaster 实际上,我重新启动了程序,这次它运行得很好。然而,重新启动应用程序需要一些时间,而进入此 catch 块需要更长的时间。如果将来再遇到这种情况,我正在寻找解决方案,以在不重新启动 VS 或我的应用程序的情况下修复它。 - Matias Cicero
1
如果你没有内存转储并且没有重现步骤,恐怕你很难得到令人满意的答案。我见过这样的错误每隔几年就会出现一次;摆脱它,继续工作吧。 ;) - CodeCaster
1
@usefulBee 是的,但是它不会出现在这样的错误消息中,因为它在编译时转换为 string.Format 调用。异常是运行时产生的,所以当异常被引发时,字符串不再包含 $ 符号。 - Ron Beyer
显示剩余3条评论
6个回答

2

尝试明确地告诉编译器如何导入dll。例如:

using System;
using System.Runtime.InteropServices;

namespace BitmapProcessingCs
{
    public static class NativeMethods
    {
        [DllImport("BitmapProcessingCpp.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern void GenerateBitmap(IntPtr src, int dimension);
    }
}

1

我用以下步骤解决了同样的问题:

第一步) 如果您使用Visual Studio在C++中编写自定义DLL,则在项目的属性页面上将Common Language Runtime Support (/clr)参数设置为Common Language Runtime Support (/clr)

第二步).h文件中的函数声明中使用__declspec(dllexport)关键字,如下所示:

__declspec(dllexport) double Sub(int a,int b);

步骤3)构建和导出DLL文件,然后使用Dependency Walker软件获取您的函数EntryPoint

步骤4)在C#项目中导入DLL文件,并设置EntryPointCallingConvention变量,如下所示:

[DllImport("custom.dll", EntryPoint = "?Sub@@Y234NN@Z", CallingConvention = CallingConvention.Cdecl)]

    public static extern double Sub(int a,int b);

0

请查看MSDN的库:https://msdn.microsoft.com/zh-cn/library/ms164891.aspx

根据他们的说法,如果您尝试在未发生异常的情况下评估异常对象,则会收到异常。但是,由于您在catch块中,已经发生了异常...没有看到您的代码很难猜测,但是您是否可能有多个线程运行,并且异常被一个线程消耗后才被另一个线程处理?这并不真正有意义,但值得一看。 更安全的选择是确保在尝试从记录器中获取详细信息之前检查异常是否为空。 还值得注意的是:HttpRequestException包含一个内部异常,这可能是您空引用的来源?只是推测。


0

我同意trapsuutjies的观点,可能没有例外。要抑制这个错误,请按Ctrl+Alt+E,展开托管调试助手,并取消选中LoadFromContext。


0

0

当项目的配置设置为发布时,我遇到了这个问题。切换到调试模式解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接