Debugging 调试NSIS安装程序的方法?

Debugging 调试NSIS安装程序的方法?,debugging,nsis,Debugging,Nsis,尽管NSIS允许您构建功能强大的安装程序,但NSIS使用的“低级语言让我想起汇编”很容易出错,因此,当您希望安装程序执行更复杂的操作而不是编写文件时,必须进行调试 到目前为止,我使用了以下类似于Dr Printf的调试技术: 在包含在所有位置的.nsh文件中,我根据DEBUGdefine的值定义了一个NSIS\u DEBUG\u MSG宏 如果启用了DEBUG,宏将触发带有调试消息的消息框 如果DEBUG处于禁用状态,则宏将不执行任何操作 这种方法对我很有用,但也有一些缺点: 它要求我

尽管NSIS允许您构建功能强大的安装程序,但NSIS使用的“低级语言让我想起汇编”很容易出错,因此,当您希望安装程序执行更复杂的操作而不是编写文件时,必须进行调试

到目前为止,我使用了以下类似于Dr Printf的调试技术:

  • 在包含在所有位置的
    .nsh
    文件中,我根据
    DEBUG
    define的值定义了一个
    NSIS\u DEBUG\u MSG
    • 如果启用了
      DEBUG
      ,宏将触发带有调试消息的消息框
    • 如果
      DEBUG
      处于禁用状态,则宏将不执行任何操作
这种方法对我很有用,但也有一些缺点:

  • 它要求我填写我认为失败的代码,调用
    NSIS\u DEBUG\u MSG
    并多次重建安装程序,直到我获得足够的信息来解决问题
  • 如果我的问题是安装程序本身失败(如果安装程序死掉),这对我没有好处

因此,我想知道的是,对于这些安装程序,您使用了哪些调试方法,以便我能够改进我的调试方法。

为我节省了大量时间的是使用NSIS创建的日志。编译脚本时的日志和安装日志。它们允许我检查我定义的宏是否正在使用,以及安装是否实际运行了它们应该运行的脚本


这似乎太少了,但实际上,这是我需要的一切,以保持50+nsh文件的安装软件运行,以及分而治之的原则。

您可以从具有高级日志记录的官方网站下载NSIS的一个特殊版本。这将为您提供非常详细的日志信息,使调试变得更容易。

在我使用NSIS期间,有以下几点值得注意:

我发现没有什么比解析更强大了!使用自制工具进行详细的3级输出;)

我发现您不能依赖任何基于NSIS的调试方法。它可能会崩溃。。你的安装程序也会随之崩溃。不漂亮,嗯(

我发现,启用/禁用按需调试也是对付IDSSE的强大武器,因为它允许区分不稳定和失败的NSIS构建(尽管使用CI术语更容易…:)

我发现,没有实时自动NSIS测试的详细输出就像驾驶装有自行车发动机的凯迪拉克:)


希望这对那些偶然访问此问题的人有所帮助:)

编辑:最好从第三方工具开始。例如,无需在GUI周围烦扰,因为使用以下工具总是更容易:

  • 日食(虽然我不喜欢它:P)
  • NSIS对话框设计器()
  • 自制的静态代码分析器。我为自己做了一个:P

编辑#2:我发现调试非常有效的方法是使用直接文档自动化。目前我使用以下组件:

  • (请参阅重要注释,以确保没有意外惊喜…)
  • (有关详细信息,请参阅此链接:)
结果是,我得到了
nsDialog:Show
之后的屏幕截图,加上我在wiki中得到了更新的图像:)。。只剩下从
svnlook
:)获取信息了


编辑#3:通过构建svn日志——使用Delphi的NSIS v2.44头文件和Lazarus IDE 0.9.30.2:)导出xml DLL,也解决了svnlook的需要,感谢Lazarus

呜呜!:)



编辑#4:点击这里的小讨论:

我经常使用消息框,这比使用基本消息框处理堆栈问题要好得多。我也倾向于使用设置所有寄存器的宏$0=r0,$1=r1等,因此我知道堆栈处于正确状态。当然,这只在设计阶段有用,对最终用户系统的调试没有太大用处…

接受答案会很好…但是-它需要与nsisdbg插件一样的额外维护。。。我觉得这样做或将nsisdbg作为“数据结构”的输出没有任何好处。。另外,我需要修复nsis屏幕截图插件,使其在Windows NT 6.x操作系统下正常运行……是的,收集anf分析编译时日志(在我的构建环境中)的唯一问题是nsis没有任何编译时位检查。如今,只对32位进行高度集成的日志记录显然不是长久的解决方案,更不用说基本上无效的系统资源使用了……如果您正在寻找NSIS,这简直是疯了。我必须处理一个遗留nsis安装程序,它有数千行代码。我本可以用WinRAR+Lazarus编写一个更好的安装程序,只需更少的行数。