调试.NET中的Invoked函数

Joh*_*ohn 5 .net reflection debugging invoke visual-studio

我使用Reflection(Method.Invoke)在.NET中调用函数.如果在此方法中发生错误并引发异常,则调试器不会显示实际代码,而是在Invoke()调用时停止.我可以从InnerException中检索异常信息,但与使用callstack的常规调试等相比,这非常不方便.可以像使用常规函数调用一样调试使用Method.Invoke调用的方法吗?

Jar*_*Par 7

您喜欢的是"Just My Code"功能.默认情况下,调试器将调试限制为由开发人员认为是编写的代码.这减少了调试WPF或WinForms启动时会出现的大量噪音.

为了让所有代码都能运行Exception助手等项目,您应该禁用Just My Code.

  • 工具 - >选项
  • 调试器
  • 取消选中"启用我的代码调试"

  • 不幸的是,“仅启用我的代码”已经取消选中。但这似乎无关紧要,因为调用者和被调用者实际上都是我的代码。 (2认同)

Cod*_*ike 5

如果所有其他方法都失败了,您还可以将类似的内容放入被调用的方法中:

#if DEBUG
    System.Diagnostics.Debugger.Break();
#endif
Run Code Online (Sandbox Code Playgroud)

这将基本上“以编程方式”在那里导致断点。

您还可以通过执行以下操作使其稍微好一点:

  if(Debugger.IsAttached)
    Debugger.Break();
Run Code Online (Sandbox Code Playgroud)

这样它只会在您实际在调试器中运行时中断。


编辑:

第二个想法是,如果您有编辑它的代码,那么您可能只需通过 VisualStudio 在那里粘贴一个常规断点即可。我想我的回答没有意义......对不起:)


Joh*_*ohn 0

我的解决方法是创建计时器并调用其中的方法Tick()

GUI代码->通过Method.Invoke调用函数->函数设置一个定时器->在Tick中有函数体

不幸的是它不是很漂亮(并且在某些情况下不适合)