代码之家  ›  专栏  ›  技术社区  ›  Mason Wheeler

如何加载包并保持调试器正常工作?

  •  0
  • Mason Wheeler  · 技术社区  · 16 年前

    我在jvcl中使用tjvpluginmanager为我的程序创建和加载基于bpl的插件。问题是,其中一个插件加载不正确,我无法调试它。每次我试图跟踪加载序列时,它都会到达 LoadLibrary api调用,然后调试器似乎忘记了它的作用。它完全丧失了将程序代码与源代码行关联、在调用堆栈中提供有意义的数据或显示局部变量的能力。它仍然会在断点处停止,但它会中断到CPU窗口,所有内联源代码都被剥离。

    这发生在德尔福2007年和2009年,让我发疯。有人知道如何加载插件而不破坏调试器吗?有人知道吗 为什么? 一开始就把它弄坏了?

    注意:我不想寻找其他的调试方法。我知道所有关于追踪和记录以及其他的事情。我想要的是了解出了什么问题以及如何解决。我肯定不是唯一一个用过TJVPluginManager的人?

    6 回复  |  直到 16 年前
        1
  •  3
  •   dummzeuch Stijn Sanders    16 年前

    您的问题的答案不完全是这样的:您是否通过设置宿主应用程序并在包的启动代码中放置断点来尝试调试包项目?

        2
  •  1
  •   Argalatyr Rodrigo    16 年前

    我找到雷·卡诺普卡的(莱泽) CodeSite 在集成调试器运行的情况下,对调试非常有用。想一想我想用codesite监控的事情,实际上有助于我专注于最重要的事情——它会养成良好的习惯。

        3
  •  0
  •   skamradt    16 年前

    代码站点的另一个替代方案是 Overseer 它是 nexus project ,但它是独立的,因此不需要使用它们的框架。代码站点是一个更好的选择,但在紧要关头,监督者也可以工作。

        4
  •  0
  •   skamradt    16 年前

    我发现使用插件包可能是有问题的,很多年前切换到一个完全基于COM的插件实现,而且从来没有任何问题。基于COM的插件的另一个优点是,它们不需要Delphi编写,当主应用程序切换到新版本的编译器时不需要重新编译(我用Delphi5编译的插件对Delphi2009编译的主应用程序仍然运行良好!)而且它们更容易编写测试应用程序来帮助调试。

    我注意到的唯一副作用是,共享代码最终出现在可执行文件中,插件需要注册到注册表中。

        5
  •  0
  •   Fabricio Araujo    16 年前

    嗯…这是一个愚蠢的问题,但我不得不问:初始化函数和其他工作的插件一样,有准确的声明语法?(从你的问题中,我扣除了你做的其他一些有用的东西)

        6
  •  0
  •   Ondrej Kelle    16 年前

    检查你的依赖关系。确保每个单元只编译成一个包。每当一个包需要从另一个包引用一个单元时,请使用requires子句来执行此操作。注意编译器关于隐式链接单元的警告。