簡體   English   中英

使用非javascript進行nodejs調試

[英]nodejs debugging with non-javascript

就我而言,我想調試 CoffeeScript,但這個問題不是 CoffeeScript 特定的。 它涉及調試任何編譯為 JavaScript 的非 JavaScript 語言。 為此,您需要創建 nodejs 能夠執行的源映射。 但是,我想查看並逐步檢查我的 CoffeeScript 代碼中的變量,因為我知道 nodejs 實際上會執行相應的 JavaScript 代碼——使用源映射映射它們之間的行號。 毫無疑問,有人會詢問我的源代碼,所以我們就使用它(稱為 temp.coffee):

orders = [341, 454, 198, 264, 307]
totalOrders = 0
debugger
for order in orders
    totalOrders += order
console.log totalOrders

請注意,我添加了一個“調試器”語句,盡管這不是必需的 - 默認情況下,nodejs 應該在執行第一條語句之前停止。 通過在終端中執行此操作,我實際上已經接近實現我的目標:

coffee -cm temp.coffee
node inspect temp.coffee

第一條語句將 temp.coffee 編譯為 temp.js,同時生成文件 temp.js.map - 一個源映射文件。 第二條語句似乎也有效 - 它告訴我調試器已附加並給我一個提示。 不幸的是,如果我嘗試執行 's' 命令以跳過程序中的下一條語句,它會告訴我“未捕獲的錯誤 [ERR_DEBUGGER_ERROR]:只能在暫停時執行操作。” 為什么不暫停??? 我試過使用“運行”或“重啟”命令,但得到了相同的結果。 我希望我只是忘記做某事,並且有人可以提示我。

您的咖啡文件未作為節點腳本加載可能是因為它不是有效的文件擴展名。 您可以使用scripts命令觀察這一點

$ node inspect temp.coffee
< Debugger listening on ws://127.0.0.1:9229/b8f44e67-51c6-428b-8010-ccc02a30459a
< For help, see: https://nodejs.org/en/docs/inspector
<
connecting to 127.0.0.1:9229 ... ok
< Debugger attached.
<
< Waiting for the debugger to disconnect...
<
debug> scripts
  23: node:events
  24: node:buffer
  35: node:async_hooks
  37: node:stream
  41: node:util
  43: node:timers
  55: node:string_decoder
  58: node:stream/promises
  63: node:path
  65: node:fs
  68: node:querystring
  73: node:v8
  76: node:vm
  77: node:url
  80: node:crypto
  138: node:net
debug>

請注意任何腳本中都缺少任何temp名稱。 您的調試文件應該是加載的腳本。


運行node inspect temp.js會產生以下結果

$ node inspect temp.js
< Debugger listening on ws://127.0.0.1:9229/658d30f3-c2d7-4524-8353-7974cea3048a
< For help, see: https://nodejs.org/en/docs/inspector
<
connecting to 127.0.0.1:9229 ... ok
< Debugger attached.
<
Break on start in C:\workdir\temp\temp.js:2
  1 // Generated by CoffeeScript 2.7.0
> 2 (function() {
  3   var i, len, order, orders, totalOrders;
  4
debug> scripts
  23: node:events
  24: node:buffer
  35: node:async_hooks
  37: node:stream
  41: node:util
  43: node:timers
  55: node:string_decoder
  58: node:stream/promises
  63: node:path
  65: node:fs
  68: node:querystring
  73: node:v8
  76: node:vm
  77: node:url
  80: node:crypto
  138: node:net
* 153: C:\workdir\temp\temp.js
debug>

請注意對temp.js加載的引用和斷點命中的顯式注釋。 然后你可以執行一些命令:

debug> c
break in C:\workdir\temp\temp.js:9
  7   totalOrders = 0;
  8
> 9   debugger;
 10
 11   for (i = 0, len = orders.length; i < len; i++) {
debug> exec totalOrders
0
debug> exec orders
[ 341,
  454,
  198,
  264,
  307 ]
debug> c
< 1564
<
< Waiting for the debugger to disconnect...
<
debug>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM