# Message debug function node

**URL:** https://discourse.nodered.org/t/message-debug-function-node/53261
**Category:** Share Your Projects
**Created:** [5 November 2021 12:25 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261 "2021-11-05T12:25:53Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![ozpos](https://avatars.discourse-cdn.com/v4/letter/o/278dde/32.png) [@ozpos](https://discourse.nodered.org/u/ozpos)
#### Post date: [5 November 2021 12:25 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/1 "2021-11-05T12:25:53Z")

</div>

Hi All,

I got into a spot of bother with message timing and fatal lock up so I created this function node to pause, skip, play next, play last, dump and run any message with a topic.

Messages are saved to context variable queues and can be inspected at your leisure.

I hope you find it as useful as I have.

P.S. Could anyone please explain or show when 'node.done()' should be used ?  
I have read the docs but it is still not clear to me when it should be used. In particular the case where msg loops perform count up/down functions.

```auto
[{"id":"a68c78a260d393d4","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"baf0711f8fa94fb9","type":"function","z":"a68c78a260d393d4","name":"in1","func":"const MAX_Q_LEN = 100;\n\nvar q = context.get(node.name) || {status: \"_PAUSE_\", last: {}, que:[]};\ncontext.set(node.name, q);\n\nswitch(msg.topic) {\n case \"_LAST_\":\n if (Object.keys(q.last) === 0) return;\n return q.last;\n\n case \"_DUMP_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n }\n showStatus(\"yellow\");\n break;\n\n case \"_NEXT_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n node.send(q.que.shift());\n showStatus(\"yellow\");\n break;\n \n case \"_SKIP_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n q.que.shift();\n showStatus(\"yellow\");\n break;\n\n case \"_PAUSE_\":\n q.status = msg.topic;\n context.set(node.name, q);\n showStatus(\"yellow\");\n break;\n\n case \"_RUN_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n showStatus(\"green\");\n break;\n\n default:\n // msg\n if (q.status === \"_DUMP_\") {\n q.last = msg;\n showStatus(\"yellow\");\n break;\n }\n if (q.status === \"_PAUSE_\"){\n q.last = msg;\n if (q.que.length > MAX_Q_LEN) {\n showStatus(\"red\");\n break;\n }\n q.que.push(msg);\n showStatus(\"yellow\");\n break;\n }\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n q.last = msg;\n showStatus(\"green\");\n context.set(node.name,q);\n node.done();\n return msg;\n}\ncontext.set(node.name,q);\nnode.done();\nreturn;\n\nfunction showStatus(colour){\n node.status({fill:colour,shape:\"ring\",text:topics(colour)});\n}\nfunction topics(colour){\n let s = q.status+(colour===\"red\" ? \"Overflow\": \"\")+\"(\"+(Object.keys(q.last).length>0 ? q.last.topic : \"\")+\")\";\n for (let i=0;i<q.que.length;i++) {\n s = s + q.que[i].topic + ((i===q.que.length-1) ? \"\":\",\");\n }\n return s;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":515,"y":220,"wires":[["db81c15965a84b21"]],"l":false},{"id":"3e018a9f22cef19e","type":"function","z":"a68c78a260d393d4","name":"in1-history","func":"const MAX_Q_LEN = 100;\n\nvar q = context.get(node.name) || {status: \"_PAUSE_\", last: {}, que:[]};\ncontext.set(node.name, q);\n\nswitch(msg.topic) {\n case \"_LAST_\":\n if (Object.keys(q.last) === 0) return;\n return q.last;\n\n case \"_DUMP_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n }\n showStatus(\"yellow\");\n break;\n\n case \"_NEXT_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n node.send(q.que.shift());\n showStatus(\"yellow\");\n break;\n \n case \"_SKIP_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n q.que.shift();\n showStatus(\"yellow\");\n break;\n\n case \"_PAUSE_\":\n q.status = msg.topic;\n context.set(node.name, q);\n showStatus(\"yellow\");\n break;\n\n case \"_RUN_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n showStatus(\"green\");\n break;\n\n default:\n // msg\n if (q.status === \"_DUMP_\") {\n q.last = msg;\n showStatus(\"yellow\");\n break;\n }\n if (q.status === \"_PAUSE_\"){\n q.last = msg;\n if (q.que.length > MAX_Q_LEN) {\n showStatus(\"red\");\n break;\n }\n q.que.push(msg);\n showStatus(\"yellow\");\n break;\n }\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n q.last = msg;\n showStatus(\"green\");\n context.set(node.name,q);\n node.done();\n return msg;\n}\ncontext.set(node.name,q);\nnode.done();\nreturn;\n\nfunction showStatus(colour){\n node.status({fill:colour,shape:\"ring\",text:topics(colour)});\n}\nfunction topics(colour){\n let s = q.status+(colour===\"red\" ? \"Overflow\": \"\")+\"(\"+(Object.keys(q.last).length>0 ? q.last.topic : \"\")+\")\";\n for (let i=0;i<q.que.length;i++) {\n s = s + q.que[i].topic + ((i===q.que.length-1) ? \"\":\",\");\n }\n return s;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":515,"y":340,"wires":[[]],"l":false},{"id":"dee682a3b7242146","type":"function","z":"a68c78a260d393d4","name":"out1","func":"const MAX_Q_LEN = 100;\n\nvar q = context.get(node.name) || {status: \"_PAUSE_\", last: {}, que:[]};\ncontext.set(node.name, q);\n\nswitch(msg.topic) {\n case \"_LAST_\":\n if (Object.keys(q.last) === 0) return;\n return q.last;\n\n case \"_DUMP_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n }\n showStatus(\"yellow\");\n break;\n\n case \"_NEXT_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n node.send(q.que.shift());\n showStatus(\"yellow\");\n break;\n \n case \"_SKIP_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n q.que.shift();\n showStatus(\"yellow\");\n break;\n\n case \"_PAUSE_\":\n q.status = msg.topic;\n context.set(node.name, q);\n showStatus(\"yellow\");\n break;\n\n case \"_RUN_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n showStatus(\"green\");\n break;\n\n default:\n // msg\n if (q.status === \"_DUMP_\") {\n q.last = msg;\n showStatus(\"yellow\");\n break;\n }\n if (q.status === \"_PAUSE_\"){\n q.last = msg;\n if (q.que.length > MAX_Q_LEN) {\n showStatus(\"red\");\n break;\n }\n q.que.push(msg);\n showStatus(\"yellow\");\n break;\n }\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n q.last = msg;\n showStatus(\"green\");\n context.set(node.name,q);\n node.done();\n return msg;\n}\ncontext.set(node.name,q);\nnode.done();\nreturn;\n\nfunction showStatus(colour){\n node.status({fill:colour,shape:\"ring\",text:topics(colour)});\n}\nfunction topics(colour){\n let s = q.status+(colour===\"red\" ? \"Overflow\": \"\")+\"(\"+(Object.keys(q.last).length>0 ? q.last.topic : \"\")+\")\";\n for (let i=0;i<q.que.length;i++) {\n s = s + q.que[i].topic + ((i===q.que.length-1) ? \"\":\",\");\n }\n return s;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":755,"y":100,"wires":[["4495c23ceef04212","027a6056f4554690"]],"l":false},{"id":"6e94340bbe1a575a","type":"function","z":"a68c78a260d393d4","name":"out1-history","func":"const MAX_Q_LEN = 100;\n\nvar q = context.get(node.name) || {status: \"_PAUSE_\", last: {}, que:[]};\ncontext.set(node.name, q);\n\nswitch(msg.topic) {\n case \"_LAST_\":\n if (Object.keys(q.last) === 0) return;\n return q.last;\n\n case \"_DUMP_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n }\n showStatus(\"yellow\");\n break;\n\n case \"_NEXT_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n node.send(q.que.shift());\n showStatus(\"yellow\");\n break;\n \n case \"_SKIP_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n q.que.shift();\n showStatus(\"yellow\");\n break;\n\n case \"_PAUSE_\":\n q.status = msg.topic;\n context.set(node.name, q);\n showStatus(\"yellow\");\n break;\n\n case \"_RUN_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n showStatus(\"green\");\n break;\n\n default:\n // msg\n if (q.status === \"_DUMP_\") {\n q.last = msg;\n showStatus(\"yellow\");\n break;\n }\n if (q.status === \"_PAUSE_\"){\n q.last = msg;\n if (q.que.length > MAX_Q_LEN) {\n showStatus(\"red\");\n break;\n }\n q.que.push(msg);\n showStatus(\"yellow\");\n break;\n }\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n q.last = msg;\n showStatus(\"green\");\n context.set(node.name,q);\n node.done();\n return msg;\n}\ncontext.set(node.name,q);\nnode.done();\nreturn;\n\nfunction showStatus(colour){\n node.status({fill:colour,shape:\"ring\",text:topics(colour)});\n}\nfunction topics(colour){\n let s = q.status+(colour===\"red\" ? \"Overflow\": \"\")+\"(\"+(Object.keys(q.last).length>0 ? q.last.topic : \"\")+\")\";\n for (let i=0;i<q.que.length;i++) {\n s = s + q.que[i].topic + ((i===q.que.length-1) ? \"\":\",\");\n }\n return s;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":755,"y":180,"wires":[[]],"l":false},{"id":"6daa880fe91842fa","type":"inject","z":"a68c78a260d393d4","name":"_RUN_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"0.1","topic":"_RUN_","x":120,"y":80,"wires":[[]]},{"id":"1ef15ff10b4b74e9","type":"inject","z":"a68c78a260d393d4","name":"_PAUSE_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_PAUSE_","x":120,"y":160,"wires":[[]]},{"id":"b789f8b88c459a95","type":"inject","z":"a68c78a260d393d4","name":"_DUMP_All","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_DUMP_","x":310,"y":120,"wires":[["dee682a3b7242146","6e94340bbe1a575a","baf0711f8fa94fb9","3e018a9f22cef19e","8009337554e6eda5","7df7bf76c194993a"]]},{"id":"f48294dd79048b39","type":"inject","z":"a68c78a260d393d4","name":"_NEXT_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_NEXT_","x":120,"y":200,"wires":[[]]},{"id":"df8fcf9da2fbb7cd","type":"inject","z":"a68c78a260d393d4","name":"_LAST_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_LAST_","x":300,"y":360,"wires":[["baf0711f8fa94fb9"]]},{"id":"c4c31e8711ceeb35","type":"inject","z":"a68c78a260d393d4","name":"_SKIP_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_SKIP_","x":310,"y":320,"wires":[["baf0711f8fa94fb9"]]},{"id":"14fb92879f805fd0","type":"delay","z":"a68c78a260d393d4","name":"","pauseType":"delay","timeout":"100","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":610,"y":280,"wires":[["baf0711f8fa94fb9","3e018a9f22cef19e"]]},{"id":"db81c15965a84b21","type":"function","z":"a68c78a260d393d4","name":"dec","func":"if (msg.topic>101){\n msg.payload = -10;\n}\nif (msg.topic<-101){\n msg.payload = 10;\n}\nmsg.topic = msg.topic + msg.payload;\n\nreturn [msg,msg];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":220,"wires":[["dee682a3b7242146","6e94340bbe1a575a"],["8009337554e6eda5","7df7bf76c194993a"]]},{"id":"2bcab68aa869b011","type":"ui_text","z":"a68c78a260d393d4","group":"6a4d510d.5de65","order":31,"width":0,"height":0,"name":"","label":"text","format":"{{msg.payload}}","layout":"row-spread","className":"","x":910,"y":20,"wires":[]},{"id":"29e9db35ba55f067","type":"inject","z":"a68c78a260d393d4","name":"p5:t101","props":[{"p":"payload"},{"p":"topic","v":"0","vt":"num"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"5","payloadType":"num","x":310,"y":240,"wires":[["baf0711f8fa94fb9"]]},{"id":"f55c68dcd5c5e6fa","type":"inject","z":"a68c78a260d393d4","name":"_PAUSE_All","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"_PAUSE_","x":310,"y":80,"wires":[["baf0711f8fa94fb9","dee682a3b7242146","3e018a9f22cef19e","6e94340bbe1a575a","8009337554e6eda5","7df7bf76c194993a"]]},{"id":"8009337554e6eda5","type":"function","z":"a68c78a260d393d4","name":"out2","func":"const MAX_Q_LEN = 100;\n\nvar q = context.get(node.name) || {status: \"_PAUSE_\", last: {}, que:[]};\ncontext.set(node.name, q);\n\nswitch(msg.topic) {\n case \"_LAST_\":\n if (Object.keys(q.last) === 0) return;\n return q.last;\n\n case \"_DUMP_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n }\n showStatus(\"yellow\");\n break;\n\n case \"_NEXT_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n node.send(q.que.shift());\n showStatus(\"yellow\");\n break;\n \n case \"_SKIP_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n q.que.shift();\n showStatus(\"yellow\");\n break;\n\n case \"_PAUSE_\":\n q.status = msg.topic;\n context.set(node.name, q);\n showStatus(\"yellow\");\n break;\n\n case \"_RUN_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n showStatus(\"green\");\n break;\n\n default:\n // msg\n if (q.status === \"_DUMP_\") {\n q.last = msg;\n showStatus(\"yellow\");\n break;\n }\n if (q.status === \"_PAUSE_\"){\n q.last = msg;\n if (q.que.length > MAX_Q_LEN) {\n showStatus(\"red\");\n break;\n }\n q.que.push(msg);\n showStatus(\"yellow\");\n break;\n }\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n q.last = msg;\n showStatus(\"green\");\n context.set(node.name,q);\n node.done();\n return msg;\n}\ncontext.set(node.name,q);\nnode.done();\nreturn;\n\nfunction showStatus(colour){\n node.status({fill:colour,shape:\"ring\",text:topics(colour)});\n}\nfunction topics(colour){\n let s = q.status+(colour===\"red\" ? \"Overflow\": \"\")+\"(\"+(Object.keys(q.last).length>0 ? q.last.topic : \"\")+\")\";\n for (let i=0;i<q.que.length;i++) {\n s = s + q.que[i].topic + ((i===q.que.length-1) ? \"\":\",\");\n }\n return s;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":755,"y":280,"wires":[["14fb92879f805fd0"]],"l":false},{"id":"7df7bf76c194993a","type":"function","z":"a68c78a260d393d4","name":"out2","func":"const MAX_Q_LEN = 100;\n\nvar q = context.get(node.name) || {status: \"_PAUSE_\", last: {}, que:[]};\ncontext.set(node.name, q);\n\nswitch(msg.topic) {\n case \"_LAST_\":\n if (Object.keys(q.last) === 0) return;\n return q.last;\n\n case \"_DUMP_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n }\n showStatus(\"yellow\");\n break;\n\n case \"_NEXT_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n node.send(q.que.shift());\n showStatus(\"yellow\");\n break;\n \n case \"_SKIP_\":\n if (q.status !== \"_PAUSE_\" || q.que.length === 0) return;\n q.que.shift();\n showStatus(\"yellow\");\n break;\n\n case \"_PAUSE_\":\n q.status = msg.topic;\n context.set(node.name, q);\n showStatus(\"yellow\");\n break;\n\n case \"_RUN_\":\n q.status = msg.topic;\n context.set(node.name, q);\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n showStatus(\"green\");\n break;\n\n default:\n // msg\n if (q.status === \"_DUMP_\") {\n q.last = msg;\n showStatus(\"yellow\");\n break;\n }\n if (q.status === \"_PAUSE_\"){\n q.last = msg;\n if (q.que.length > MAX_Q_LEN) {\n showStatus(\"red\");\n break;\n }\n q.que.push(msg);\n showStatus(\"yellow\");\n break;\n }\n while (q.que.length>0){\n q.last = q.que.shift();\n node.send(q.last);\n context.set(node.name, q);\n }\n q.last = msg;\n showStatus(\"green\");\n context.set(node.name,q);\n node.done();\n return msg;\n}\ncontext.set(node.name,q);\nnode.done();\nreturn;\n\nfunction showStatus(colour){\n node.status({fill:colour,shape:\"ring\",text:topics(colour)});\n}\nfunction topics(colour){\n let s = q.status+(colour===\"red\" ? \"Overflow\": \"\")+\"(\"+(Object.keys(q.last).length>0 ? q.last.topic : \"\")+\")\";\n for (let i=0;i<q.que.length;i++) {\n s = s + q.que[i].topic + ((i===q.que.length-1) ? \"\":\",\");\n }\n return s;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":755,"y":400,"wires":[[]],"l":false},{"id":"347a5baf1299a36b","type":"inject","z":"a68c78a260d393d4","name":"_NEXT_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_NEXT_","x":300,"y":280,"wires":[["baf0711f8fa94fb9"]]},{"id":"0e3a5ba85cef35fc","type":"inject","z":"a68c78a260d393d4","name":"_NEXT_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_NEXT_","x":640,"y":20,"wires":[["dee682a3b7242146"]]},{"id":"17d3a11459df7de2","type":"inject","z":"a68c78a260d393d4","name":"_RUN_All","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"0.1","topic":"_RUN_","x":320,"y":160,"wires":[["baf0711f8fa94fb9","dee682a3b7242146","8009337554e6eda5"]]},{"id":"66bb81da9bb2619d","type":"inject","z":"a68c78a260d393d4","name":"_NEXT_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_NEXT_","x":380,"y":440,"wires":[["8009337554e6eda5"]]},{"id":"4495c23ceef04212","type":"debug","z":"a68c78a260d393d4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":830,"y":60,"wires":[]},{"id":"f476bba3ac5552da","type":"inject","z":"a68c78a260d393d4","name":"_DUMP_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_DUMP_","x":120,"y":120,"wires":[[]]},{"id":"203b4c7ee33e3b29","type":"inject","z":"a68c78a260d393d4","name":"_RUN_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"0.1","topic":"_RUN_","x":660,"y":60,"wires":[["dee682a3b7242146"]]},{"id":"027a6056f4554690","type":"change","z":"a68c78a260d393d4","name":"t->p","rules":[{"t":"set","p":"payload","pt":"msg","to":"topic","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":810,"y":20,"wires":[["2bcab68aa869b011"]]},{"id":"1b047cf9906b4060","type":"inject","z":"a68c78a260d393d4","name":"_LAST_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_LAST_","x":380,"y":520,"wires":[["8009337554e6eda5"]]},{"id":"583c9493ab1961da","type":"inject","z":"a68c78a260d393d4","name":"_SKIP_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_SKIP_","x":390,"y":480,"wires":[["8009337554e6eda5"]]},{"id":"fe73532aa1dc37db","type":"inject","z":"a68c78a260d393d4","name":"_LAST_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_LAST_","x":120,"y":240,"wires":[[]]},{"id":"3ee84853a5f88b2e","type":"inject","z":"a68c78a260d393d4","name":"_SKIP_","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"_SKIP_","x":130,"y":280,"wires":[[]]},{"id":"afaf1daa746a9a65","type":"comment","z":"a68c78a260d393d4","name":"Controls","info":"","x":100,"y":40,"wires":[]},{"id":"a6cef4626d7e55b4","type":"comment","z":"a68c78a260d393d4","name":"A single step msg debug tool.","info":"","x":340,"y":40,"wires":[]},{"id":"6a4d510d.5de65","type":"ui_group","name":"","tab":"56715436.c2591c","order":2,"disp":false,"width":"9","collapse":false,"className":""},{"id":"56715436.c2591c","type":"ui_tab","name":"MsgDebug - node@14.17.5 red@2.1.3 dashboard@3.1.0","icon":"dashboard","order":3,"disabled":false,"hidden":false}]

```

---

<div class="post-metadata">

### Author: ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)
#### Post date: [6 November 2021 08:00 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/2 "2021-11-06T08:00:02Z")

</div>

Hi @ozpos thanks for sharing. Are you aware of the new [node-red debugger](https://flows.nodered.org/node/node-red-debugger)? It has many of the features you mention

---

<div class="post-metadata">

### Author: ![ozpos](https://avatars.discourse-cdn.com/v4/letter/o/278dde/32.png) [@ozpos](https://discourse.nodered.org/u/ozpos)
#### Post date: [6 November 2021 09:04 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/3 "2021-11-06T09:04:40Z")

</div>

You are welcome. No I was not aware of the debugger. While I was writing the node I thought it would be possible to do it in a less obtrusive way and for the whole platform.

Thank you for pointing it out.

---

<div class="post-metadata">

### Author: ![ozpos](https://avatars.discourse-cdn.com/v4/letter/o/278dde/32.png) [@ozpos](https://discourse.nodered.org/u/ozpos)
#### Post date: [6 November 2021 09:14 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/4 "2021-11-06T09:14:18Z")

</div>

Hi @Steve-Mcl, I have a strange history message with your tag and the edit icon along side. Sorry I do not fully understand the forum platform. Any idea what it means.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/5/95cc88de50e66f9484638353a4270702343bea4f.png)

---

<div class="post-metadata">

### Author: ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)
#### Post date: [6 November 2021 09:28 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/5 "2021-11-06T09:28:16Z")

</div>

I changed the category of your post from general to [share your projects](https://discourse.nodered.org/c/share-your-projects/6) since you were sharing something you had created. Putting posts in correct category can make it clearer as to the content. For example your post title could mean several things but in the **share your projects** category, it adds context.

---

<div class="post-metadata">

### Author: ![ozpos](https://avatars.discourse-cdn.com/v4/letter/o/278dde/32.png) [@ozpos](https://discourse.nodered.org/u/ozpos)
#### Post date: [6 November 2021 09:34 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/6 "2021-11-06T09:34:47Z")

</div>

Thank you. I did not know where the best place was and had already changed the category once.

Sorry to bother you with such trivia, am I to do anything or does the History entry just stay like that as a record of who did what ?

---

<div class="post-metadata">

### Author: ![Paul-Reed](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/paul-reed/32/66906_2.png) [@Paul-Reed](https://discourse.nodered.org/u/Paul-Reed)
#### Post date: [6 November 2021 09:36 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/7 "2021-11-06T09:36:13Z")

</div>

It's just a record of changes. No need to do anything.

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)
#### Post date: [5 January 2022 09:36 UTC](https://discourse.nodered.org/t/message-debug-function-node/53261/8 "2022-01-05T09:36:22Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
