在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)
所以在我的代码中,我只是简单地放了几个这样的调试行,看看在发生错误之前我们得到了多远:
print d()
# Some buggy code here
print d()
# More buggy code here
print d(), 'here is the result of some var: ', someVar
这对我来说非常有用,因为它确实有助于快速调试。
我现在正在寻找节点后端脚本中的等价物。我在寻找,但我找不到任何有用的东西(也许我在寻找错误的词语?)。
有没有人知道如何创建一个Javascript / nodejs函数,该函数输出调用函数的文件名和行号?欢迎所有提示!
答案 0 :(得分:8)
您可以创建一个错误来获取错误所在的位置及其堆栈跟踪。然后你可以把它放到一个函数中,以获得它所在的行。
function thisLine() {
const e = new Error();
const regex = /\((.*):(\d+):(\d+)\)$/
const match = regex.exec(e.stack.split("\n")[2]);
return {
filepath: match[1],
line: match[2],
column: match[3]
};
}
console.log(thisLine());
This works for me in Google Chrome
注意@ j08691的评论:
答案 1 :(得分:0)
我发现获取与行号相关的任何内容的唯一方法是捕获window.onerror
函数,并且当出现错误消息时,将传递错误消息,即文件URL和行号:
window.onerror = function(msg, url, line) {
alert(msg + "\n" + url + ":" + line);
};
这适用于Chrome浏览器 - 我不了解其他浏览器。
编辑这个答案是在2月份给出的。 15问题中有没有提及的NodeJS。这只是在11月和17日增加的。
答案 2 :(得分:0)
您可以使用此gulp插件gulp-log-line。它记录文件和行号,而无需读取堆栈的额外费用。
你只需要使用安装gulp和gulp-log-line
npm install gulp --save
和npm install gulp-log-line
命令。之后,您需要在gulpfile.js中创建并编写以下代码并运行
gulp log-line
在构建文件夹中创建重复文件: -
var gulp = require('gulp');
var logLine = require('gulp-log-line');
gulp.task('line-log', function() {
return gulp.src("file.js", {buffer : true})
//Write here the loggers you use.
.pipe(logLine(['console.log', 'winston.info']))
.pipe(gulp.dest('./build'))
})
gulp.task('default', ['line-log'])
实施例
file.js: -
console.log('First log')
var someVariable
console.log('Second log')
变为
console.log('file.js:1', 'First log')
var someVariable
console.log('file.js:3', 'Second log')