2009-10-27 534 views
10

尽管NSIS允许你构建相当强大的安装程序,NSIS使用的“如此低级的语言使它提醒我组装”,因此,当你希望你的安装程序做更复杂的事情而不是写作时文件,调试是必须的。调试NSIS安装程序的方法?

直到现在我用以下博士printf的般的调试技术:

  • .nsh文件,我到处都包含,我定义了一个NSIS_DEBUG_MSG宏根据DEBUG的价值定义 如果
    • DEBUG,宏将触发的MessageBox与调试消息
    • 如果DEBUG关闭,宏将没有

这种方法已使我受益匪浅,但它存在一些缺点做:

  • 它要求我填写的代码,我觉得这是一个失败的呼吁NSIS_DEBUG_MSG和重建安装程序几次,直到我得到足够的信息,让我解决问题
  • 这对我没什么好,如果我的问题是,安装程序本身失败(如果安装程序死掉)

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

+4

这将是很好,从收集ANF分析编译时acccept答案... – 2012-05-24 12:09:03

回答

5

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

它看起来似乎太少了,但这实际上是我需要保持安装50个以上nsh文件的安装软件以及分治原则的一切。

+0

不错,唯一的问题日志(在我的构建环境中)是NSIS没有任何编译时位数检查。 Nowdays具有高度整合只记录了32位是definetly不长,生活solkution,不是说基本失效系统资源使用率... – 2012-11-02 07:45:07

2

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

4

期间使用NSIS我的时间,还有这些事情引人注目:

我发现没有什么是比分析更强大的自制工具详细的3级输出;)

我已经找到了!你不能依赖任何基于NSIS的调试方法。它可能会崩溃..并且您的安装程序会随之崩溃。没有漂亮,呃'? :(

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

我已经发现了详细的输出W/O实时自动NSIS测试就像自行车的发动机:)


希望它可以帮助那些不小心访问了这个问题:)

驾驶凯迪拉克编辑:从第三方工具开始总是一个好主意。例如,无需费尽口舌围绕GUI,因为它总是更容易使用一样的工具:


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

结果我得到了截图后nsDialog:Show加上我得到更新的图像在维基:) ..只剩下的东西是从svnlook提取信息:)


编辑#3:而svnlook的需求也是通过构建一个svn日志来解决--xml导出DLL使用NSIS v2.44标题为Delphi和Lazarus IDE 0.9.30.2 :)对拉撒路的荣誉!

哇噢! :)


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

2

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

+0

尽管如此 - 这需要另外maintianing为相同nsisdbg插件......我不觉得这样做的任何优势或将nsisdbg作为“数据结构”的输出:/ .. PLUS,我需要修复nsis截图插件,以使其在Windows NT 6.x操作系统下正常运行... – 2012-07-18 10:42:25