Mar*_*off 6 callstack typescript console.log
我正在开发 TypeScript 调试工具,但遇到了似乎无法以编程方式访问 TypeScript 调用堆栈的问题。
当我这样做时:
const error = new Error();
console.log(error.stack);
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果,并且可以看到 TypeScript 调用堆栈。
但如果我这样做:
const error = new Error();
const errorStack = error.stack;
console.log(errorStack);
Run Code Online (Sandbox Code Playgroud)
我只得到 JavaScript 堆栈,而不是预期的 TypeScript 堆栈。
问题在于如何或何时应用源映射。
有没有办法将第一个示例中作为控制台输出获得的相同信息获取到 TypeScript/JavaScript 变量中?任何帮助是极大的赞赏!
这是重现该问题的一些信息!
\n\n首先创建一个包含以下内容的文件“logger.ts”:
\n\nclass DebugLogging {\n public log(msg: string) {\n const error = new Error();\n console.log(error.stack);\n\n const errorStack = error.stack;\n console.log(errorStack);\n\n const realStringStack = "-> " + error.stack;\n console.log(realStringStack);\n\n debugger\n\n console.log(msg);\n }\n}\n\nconst logger = new DebugLogging();\nlogger.log("test");\nRun Code Online (Sandbox Code Playgroud)\n\n然后使用以下命令编译 TypeScript 文件:
\n\ntsc --source-map logger.ts\nRun Code Online (Sandbox Code Playgroud)\n\n现在,创建一个包含以下内容的文件“logger.html”:
\n\n<html>\n <head>\n <script src="logger.js"></script>\n </head>\n <body>\n <p>look at the console output...</p>\n <body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n\n在 Chrome 浏览器(我使用的是 V80.0.3987.163)中打开 HTML 文件,然后查看 JavaScript 控制台,它应该已经停止了“调试器”语句。
\n\n前两个console.log语句的输出均按预期显示相同的 TypeScript 调用堆栈。但第三个console.log的输出显示的是 JavaScript 调用堆栈。
\n\n一旦调用堆栈转换为字符串,映射信息就会丢失。
\n\n您现在可以在控制台中进行实验,如下所示以获得预期结果:
\n\n> error // display the contents of the Error object\n< Error\n at DebugLogging.log (logger.ts:3)\n at logger.ts:16\nRun Code Online (Sandbox Code Playgroud)\n\n现在出现了奇怪的情况:通过在控制台中输入以下内容,您将获得 JavaScript 调用堆栈,而不是字符串形式的 TypeScript 调用堆栈:
\n\n> error.stack // display the contents of the Error object\'s stack property\n< "Error\n at DebugLogging.log (file:///home/me/exer/tss/logger.js:5:21)\n at file:///home/me/exer/tss/logger.js:15:8"\n\n> error.stack.split(/at /) // display the contents of the Error object\'s stack property split into parts\n< (3)\xc2\xa0["Error\xe2\x86\xb5 ", "DebugLogging.log \n (file:///Users/shunyam/exer/tss/logger.js:5:21)\xe2\x86\xb5 ", \n "file:///Users/shunyam/exer/tss/logger.js:17:8"]\nRun Code Online (Sandbox Code Playgroud)\n\n现在,回到我原来的问题。如何将 TypeScript 调用堆栈的内容放入变量中以实际操作它?
\n\n感谢您的时间!
\n| 归档时间: |
|
| 查看次数: |
3104 次 |
| 最近记录: |