JavaScript:#debug指令的可能用途?

时间:2010-07-28 01:24:38

标签: javascript debugging

在我工作的地方,我们所有的JavaScript都是在为生产版本部署之前通过编译器运行的。这个JavaScript编译器所做的事情之一(除了像minify这样的事情之外)是寻找像这样的代码行,并将它们从我们的JavaScript的发行版本中删除:

//#debug
alert("this line of code will not make it into the release build")
//#/debug

我没有多看,但我还没有看到这个//#debug指令在我们的任何JavaScript中使用。

它可能有用吗?我不明白为什么这可能是一个好主意,并认为#debug指令(无论是用C#还是JavaScript这样的语言)通常都是糟糕编程的标志。

这是否浪费时间添加//#debug的功能或什么?

6 个答案:

答案 0 :(得分:1)

如果你使用像YUI那样有大量记录器的大型JavaScript库,它只能在调试模式下记录调试消息,以提高性能。

答案 1 :(得分:0)

由于它是专有解决方案,我们只能猜测原因。许多浏览器提供console对象来记录各种类型的消息,例如debugerror等。

您可以在生产模式下始终禁用自定义console对象。但是,日志语句仍然存在,但只是处于禁用状态。

通过让源代码通过像你这样的编译器,这些语句可以被删除,这将减少最终输出的字节大小。

答案 2 :(得分:0)

认为它等同于这样的东西:

// in a header somewhere...

// debug is off by default unless turned on at compile time
#ifndef DEBUG
#define DEBUG 0
#endif

// in your code...

var response = getSomeData({foo:1, bar:2});

#if DEBUG
console.log(response);
#endif

doStuffWith(response);

这种东西在编译语言中是完全可以接受的,那么为什么不在(预处理)javascript中呢?

答案 3 :(得分:0)

我认为它在几年后很有用(可能非常有用),并且可能是大多数开发人员了解JavaScript中发生的事情的最简单方法。那是因为IDE和其他工具要么不够成熟,要么在使用时广泛使用。

我主要在Microsoft堆栈中工作(所以我对其他环境并不熟悉),但是使用VS2008 / VS2010,Fiddler和IE8(呃! - 几年落后于FF)开发工具和FF工具(如firebug / hammerhead)等工具/ yslow / etc。,你的JavaScript中的胡椒警报不再是调试的必要条件。 (可能有一些实例很有用 - 但现在几乎没有那么多。)能够单步执行JavaScript,检查请求/响应,并在运行中进行修改确实使调试警报语句几乎过时。

所以,//调试很有用 - 现在可能不是很多。

答案 4 :(得分:0)

我使用了以下自制的stuf:

// Uncomment to enable debug messages
// var debug = true;

function ShowDebugMessage(message) {
    if (debug) {
        alert(message);
    }
}

因此,当您声明变量debug设置为true时,所有ShowDebugMessage()次调用也会调用alert()。因此,只需在代码中使用它,忘记ifdef之类的条件或调试输出行的手动注释。

答案 5 :(得分:0)

对于没有任何特定重写控制台的自定义项目。

我建议使用:https://github.com/sunnykgupta/jsLogger,由我撰写。

功能

  • 它安全地覆盖了console.log。如果控制台不可用,请注意(哦,是的,你也需要考虑它。)
  • 存储所有日志(即使它们被禁止)以供日后检索。
  • 处理主要的控制台功能,如日志,警告,错误,信息。
  • 可以修改,并会在出现新建议时更新。