相关疑难解决方法(0)

console.log的正确包装器,具有正确的行号?

我现在正在开发一个应用程序,并放置一个全局isDebug开关.我想换行console.log以方便使用.

//isDebug controls the entire site.
var isDebug = true;

//debug.js
function debug(msg, level){
    var Global = this;
    if(!(Global.isDebug && Global.console && Global.console.log)){
        return;
    }
    level = level||'info';
    Global.console.log(level + ': '+ msg);
}

//main.js
debug('Here is a msg.');
Run Code Online (Sandbox Code Playgroud)

然后我在Firefox控制台中得到了这个结果.

info: Here is a msg.                       debug.js (line 8)
Run Code Online (Sandbox Code Playgroud)

如果我想用debug()被调用的行号记录,info: Here is a msg. main.js (line 2)怎么办?

javascript

119
推荐指数
11
解决办法
6万
查看次数

如何确定JavaScript中的当前行号?

JavaScript是否有一种机制来确定当前正在执行的语句的行号(如果是,它是什么)?

javascript line-numbers

78
推荐指数
4
解决办法
5万
查看次数

在页面内的div中显示控制台错误和警报

我正在为我的网络应用程序构建调试工具,我需要在div中显示控制台错误.我知道我可以使用我自己制作的控制台,如对象并使用它,但为了将来使用,我需要将所有控制台错误发送到窗口.其实我想抓住控制台事件.

javascript browser

52
推荐指数
5
解决办法
4万
查看次数

console.log包装器保存行号并支持大多数方法?

如何编写控制台日志包装器:

  • 保持记录的行号和日志语句的文件名保持不变
  • 提供对所有日志严重性方法(错误,日志,调试......)的访问,并在控制台中将其显示在所记录的位置
  • 确实提供了一些后备(例如,当浏览器不支持错误时调用log方法)
  • 可以在中央位置关闭,所以我可以关闭生产日志
  • 确实处理没有控制台存在的情况,并且不会抛出错误

由于登录Java Script是如此不一致,因此必须有一些解决方案.自己实现它有点乏味,但似乎没有好的库.

我目前发现这个记录器提供了所有功能,但它确实搞乱了行号.http://benalman.com/projects/javascript-debug-console-log/

javascript logging

48
推荐指数
4
解决办法
1万
查看次数

继承自Error对象 - message属性在哪里?

我在Javascript中定义自定义错误对象时发现了一个奇怪的行为:

function MyError(msg) {
    Error.call(this, msg);
    this.name = "MyError";
}
MyError.prototype.__proto__ = Error.prototype;

var error = new Error("message");
error.message; // "message"

var myError = new MyError("message");
myError instanceof Error; // true
myError.message; // "" !
Run Code Online (Sandbox Code Playgroud)

为什么new Error("message")设置message属性,而Error.call(this, msg);不是?当然,我可以this.message = msgMyError构造函数中定义,但我不太明白为什么它还没有设置在第一位.

javascript

32
推荐指数
3
解决办法
2万
查看次数

自定义控制台日志功能,一个console.log包装器

function log( msgOrObj ){
    if(dev_mode){
        console.log({
            'message': msgOrObj,
            'caller': arguments.callee.caller.toString()
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我试图编写一个简单的自定义控制台日志功能(如上所述).但是我很难找到调用者来自哪个文件和行.我能看到的最多就是调用它的函数.

有没有人做过类似的事情?或者这甚至可能吗?

第70行的somescript.js中使用的示例:

log('some very important message!')
Run Code Online (Sandbox Code Playgroud)

javascript debug-backtrace

15
推荐指数
2
解决办法
9540
查看次数

Ajax驱动的JavaScript运行时断言框架

在使用越来越多的JavaScript代码处理更大的Web应用程序时,我们就如何提高代码质量进行了头脑风暴会议.

最初的想法之一是引入单元测试.这将是一个长期目标; 但是,这不会解决最常见的回归原因:更改DOM和浏览器特定问题.

单元测试在模拟的无DOM环境中运行,不在页面上.

我正在寻找的是一个断言框架,可以插入代码中,如下所示:

var $div = $("div.fooBarClass");
assertNotEmpty($div);
$div.fooBarAction();
Run Code Online (Sandbox Code Playgroud)

我发现断言框架可以做到这一点,但它们都可以登录控制台或进入DOM或打开一个愚蠢的弹出窗口.这些都不与(数千个)自动化测试一起工作. 我正在寻找的是一个运行时断言框架,它通过AJAX记录失败的断言!理想情况下,它应该是:

  • 内置了常见的断言.
  • 与JQuery模块,闭包集成.
  • 记录(通过Ajax)断言,文件名,页面,行号,失败原因,环境的一些预先配置的变量(浏览器,发行版本等).
  • 在出现故障时支持回调.(如果任何断言框架可以执行此操作,我很乐意写入回调来执行Ajax部分.)
  • 适用于所有浏览器.
  • 从生产版本中排除的微不足道.
  • 维护代码库.

javascript testing automated-tests unit-testing assertions

11
推荐指数
1
解决办法
504
查看次数

如何获取Node中调用函数的文件名和行号?

在Python中工作时,我总是有这个简单的实用程序函数,它返回调用函数的文件名和行号:

from inspect import getframeinfo, stack
def d():
    """ d stands for Debug. It returns the file name and line number from where this function is called."""
    caller = getframeinfo(stack()[1][0])
    return "%s:%d -" % (caller.filename, caller.lineno)
Run Code Online (Sandbox Code Playgroud)

所以在我的代码中我只是简单地放了几个这样的调试行来看看在发生错误之前我们得到了多少:

print d()
# Some buggy code here
print d()
# More buggy code here
print d(), 'here is the result of some var: ', someVar
Run Code Online (Sandbox Code Playgroud)

这对我来说非常有用,因为它确实有助于快速调试.

我现在正在寻找节点后端脚本中的等价物.我在寻找,但我找不到任何有用的东西(也许我在寻找错误的词?).

有谁知道如何创建一个Javascript/nodejs函数,它输出调用函数的文件名和行号?欢迎所有提示!

javascript node.js

7
推荐指数
1
解决办法
2416
查看次数

如何在TypeScript中获取源中的实际行号(用于自定义日志记录)

引用此问题,我正在使用以下代码来查找我的自定义日志记录函数的调用方的行号:

/**
 * eLog - displays calling line number & message & dumps vars as pretty json string
 * @param {string} msg - string to display in log message
 * @param {any} dispVars - any number of variables (ellipsis , aka Rest parameters) to dump
 */
function eLog(msg:string,...dispVars:any[]){
    let caller_line = (new Error).stack.split("\n")[4];
    console.log(`eLog->Line#${caller_line}->${msg}->`);
    console.log(JSON.stringify((new Error).stack.split("\n"),null,2));
    dispVars.forEach(value => {
        console.log(JSON.stringify(value,null,2));
    });
}
Run Code Online (Sandbox Code Playgroud)

这样称呼:

eLog("eLog Test",this);
Run Code Online (Sandbox Code Playgroud)

尽管这样做确实可以正确转储.js文件行号,但我需要源行号(.ts行号)。如何正确生成?

javascript node.js typescript electron

4
推荐指数
1
解决办法
674
查看次数

查找函数调用的源代码行

我已经构建了一个自定义日志记录实用程序,它显示了日志消息和日期时间.我想在调用该函数的源代码中添加行号.

有没有办法确定特定的javascript函数被触发的HTML源代码行?

javascript

3
推荐指数
1
解决办法
1016
查看次数