14

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

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

  • .nsh我到处都包含的文件中,我根据定义的值定义了一个 NSIS_DEBUG_MSGDEBUG
    • 如果打开,宏将触发带有调试消息DEBUGMessageBox
    • 如果关闭,宏将不执行任何DEBUG操作

这种方法对我很有帮助,但也有一些缺点:

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

所以我想知道的是你对这些安装程序使用什么调试方法,希望我能改进我的。

4

4 回答 4

6

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

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

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

我发现启用/禁用按需调试也是对抗 idsses 的非常强大的武器,因为它可以区分不稳定的 NSIS 构建和失败的 NSIS 构建(虽然使用 CI 术语更容易...... :))。

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


希望它对那些不小心访问这个问题的人有所帮助:)

编辑:从 3rd 方工具开始总是个好主意。例如,无需为 GUI 烦恼,因为使用以下工具总是更容易:


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

结果是我得到了截图,而且我nsDialog:Show在 wiki 中得到了更新的图像 :) .. 剩下的就是从svnlook:)获取信息


编辑#3: svnlook 的需要也可以通过使用 Delphi 和 Lazarus IDE 0.9.30.2 的 NSIS v2.44 标头构建 svn log --xml 导出 DLL 来解决 :) 感谢 Lazarus!

呜呼!:)


编辑#4:点击这里的小讨论:http: //forums.winamp.com/showthread.php?t=325521

于 2012-04-10T10:54:28.603 回答
5

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

它可能看起来太少了,但这实际上是我保持 50 多个 nsh 文件的安装软件运行所需的一切,以及分而治之的原则。

于 2009-11-10T14:03:56.227 回答
2

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

于 2012-05-21T18:01:06.933 回答
2

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

于 2009-11-20T18:50:43.000 回答