gpt4 book ai didi

c# - 调试拦截器模式

转载 作者:行者123 更新时间:2023-11-30 17:10:33 24 4
gpt4 key购买 nike

我正在学习在 Ninject 中使用拦截器模式。

我有一个拦截器如下。

public class MyInterceptor:IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("Pre Execute: " + invocation.Request.Method.Name);

invocation.Proceed();

Console.WriteLine("Post Execute: " + invocation.Request.Method.Name);
Console.WriteLine("Returned: " + invocation.ReturnValue);
}
}

我在我的 Main 方法中设置我的 Ninject 内核,如下所示。

kernel = new StandardKernel();

kernel.Bind<MyClass>().ToSelf().Intercept().With(new MyInterceptor());
myClass = kernel.Get<MyClass>();

问题是,在调试对 myClass 的方法调用时,(我在 myClass.methodName() 之类的语句上放置一个断点并按 F11)在我看到对我的拦截器的调用之前,有很多堆栈帧要传递,然后是实际的方法调用。

我确实意识到 Ninject 创建了动态代理等。在幕后,但这让事情变得有点困难,如果我想查看我的代码流,从所有拦截器到实际方法。 (想象一下调试看是哪个拦截器阻塞了一个方法调用)

有没有办法告诉 Visual Studio 不要中断 Ninject 堆栈帧? (反正我没有 Ninject 源代码)

更新本质上,我想做的是告诉 VS 不要破坏我没有源代码的代码......

最佳答案

在选项对话框中仔细研究了 4 个小时并在 Google 上搜索了某些复选框的功能(单个对话框可以制作多复杂?)后,我找到了答案。

实际上,您可以告诉 Visual Studio 不要担心某些 DLL 或 EXE,并在不中断和询问源代码的情况下单步“通过”它们。

这是如何做到的。

  1. 在 Visual Studio 中打开选项对话框。 (工具 > 选项)
  2. 导航到“调试”>“符号”部分

或在 VS 2012+ 的右上角“快速启动”框中键入“符号”,然后按回车键。

  1. 在右下角,选择“所有模块,除非排除”

    ScreenCap http://i40.tinypic.com/10gaedt.png

  2. 单击链接并指定要排除的 DLL 或 EXE。

  3. 添加您 不关心 不想调试的模块。

ScreenCap

就我而言,我必须添加

  • Ninject.dll
    • 注入(inject)核心 DLL
  • Ninject.Extensions.Interception.dll
    • 这是 Ninject 拦截模块
  • Ninject.Extensions.Interception.DynamicProxy.dll
    • 我使用动态代理实现拦截模块,而不是 LinFu 实现。我也不想调试它。

从本质上讲,此对话框的意思是,“我不关心这些 DLL。在我调试时忽略它们'。

似乎您只需要 EXE 或 DLL 名称,而不是整个路径。而且好像不区分大小写。

这个选项在 VS 2010 和 VS 2012 中。如果你有一个旧版本并且需要这个功能,你可能不走运。

添加这个之后,所有“Step-Into”(F11) 命令只针对我编写的代码,不要求符号,也不要求我为 Ninject 定位源文件。在调用堆栈窗口中,这些程序集中的所有堆栈帧都合并到一行,名为“[外部代码]”。

快乐编码。

我希望这能让您的生活更轻松。

关于c# - 调试拦截器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com