调试NSIS安装程序的方法?

时间:2009-10-27 13:36:18

标签: debugging nsis

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

到目前为止,我已经使用了以下 Dr Printf 式调试技术:

  • 在我随处可见的.nsh文件中,我根据NSIS_DEBUG_MSG定义的值定义了DEBUG
    • 如果<{1}} ,则宏将触发带有调试消息的 MessageBox
    • 如果DEBUG 关闭,则宏将无效

这种方法对我有好处,但它有一些缺点:

  • 它要求我填写代码,我认为这是通过调用DEBUG而失败的代码并重建安装程序几次,直到我获得足够的信息以允许我解决问题
  • 如果我的问题是安装程序本身失败(如果安装程序死了),那将对我没有好处。

所以我想知道的是你为这些安装程序使用的调试方法,以便我可以改进我的。

4 个答案:

答案 0 :(得分:6)

在我使用NSIS期间,有一些事情值得注意:

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

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

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

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


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

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


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

结果是我在nsDialog:Show之后获得了屏幕截图,并且我在wiki中获得了更新的图片:) ..剩下的只是从svnlook获取信息:)


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

哇噢! :)


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

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

我经常使用DumpState plugin,比堆栈问题的基本消息框要好得多。我倾向于使用一个设置所有寄存器的宏; $ 0 = r0,$ 1 = r1等所以我知道堆栈处于正确的状态。这当然仅在设计阶段有用,而不是在最终用户系统上进行调试......