如何在JavaScript中记录带有行号的错误?console.error
给出行号index.js:1
而console.log
给出正确的行号。
有没有办法修改console.error
以自动提供行号或其他记录错误的方法?
编辑: 我正在使用ReactJS和react-redux。
const messageState = createSlice({
name: 'messageState',
initialState: {
currentMessage: "No action has been selected"
},
reducers: { },
extraReducers: {
[recordAction]: (state, action) => {
switch(action.payload.action) {
case "ACTION1":
state.currentMessage = SELECT_ACTION1;
break;
case "ACTION2":
state.currentMessage = SELECT_ACTION2;
break;
default:
console.error(`messageState recordAction: Invalid action: ${action.payload.action}`);
return;
}
},
[recordActionPosition]: (state, action) => {
let qPos = action.payload.position.qPos;
let rPos = action.payload.position.rPos;
let actor = Global.entityList[action.payload.actorID];
switch(action.payload.action) {
case "ACTION1":
state.currentMessage = ACTION1_MESSAGE(actor.name, undefined, qPos, rPos);
break;
case "ACTION2":
state.currentMessage = ACTION2_MESSAGE(actor.name, qPos, rPos);
break;
default:
console.error(`messageState recordActionPosition: Invalid action: ${action.payload.action}`);
return;
}
}
}
})
错误消息messageState recordActionPosition: Invalid action: undefined ... index.js:1
我怀疑您是在谈论消息在浏览器控制台中的显示方式。浏览器在开发过程中显示文件名/行号作为帮助,以显示错误发生的位置。这是浏览器对console.error
的实现,正在添加行号。使用console.log
只是输出文本,但error
调用会使它更有助于识别错误发生的位置。
行号显示为index.js:1
,因为您的源代码可能已通过预处理器,并且在浏览器运行代码时,它都是一行。我们看不到您的代码在运行之前是如何打包的(webpack?),因此很难为您提供其他建议。
此外,最好了解为什么要在源代码中显示行号。如果只是在开发过程中,那么消息的文本是唯一的,足以识别它是哪一行。如果不是为了调试目的,为什么用户想要从源代码中知道行号?
尝试限制console.error
的使用,改为尝试throw new Error()
(但要小心它的行为类似于 return 语句)
也。请分享您的代码。当我们看不到它时,很难弄清楚它有什么问题。
您使用的是缩小文件吗?这可能是问题所在。
你使用的是 Angular、React 还是任何其他框架?可能会导致此问题。
以及其他可能的原因。
替代解决方案:将它来自的每个错误添加到每个打印错误中,以便您可以找到查找的位置以及导致它的原因。