I have a C# background so am spoilt by pressing F5 in Visual Studio and having a fantastic debug experience.
I would like to get into OSS and as I use ESLint a lot thought I'd try to give back.
I've followed http://eslint.org/docs/developer-guide/development environment successfully but am now stuck.
How do I run a rule through a debugger so I can set a breakpoint and inspect the AST, context etc?
I presume lots of console.log statements aren't the way forward.
You have a lot of options for debugging NodeJS applications. Some that come to mind are Visual Studio Code, WebStorm, Visual Studio + NodeJS Tools, IronNode, Node Inspector. All of them will allow the same workflow that you are used to, pressing F5 to start the process and attach to it. But with NodeJS, most of them would require some configuration.
Specifically to ESLint, debugging unittests is a bit problematic, since ESLint provides a wrapper around Mocha syntax to DRY unittests. Your best bet is setup your debugger to run mocha on a single file, and setup breakpoint in the rule's code, instead of unittests itself, since unittests are just arrays of objects, you can't add a breakpoint there.
How do I debug a Node.js server application?
Right now I'm mostly using alert debugging with print statements like this:
sys.puts(sys.inspect(someVariable));
There must be a better way to debug. I know that Google Chrome has a command-line debugger. Is this debugger available for Node.js as well?
node-inspector could save the day! Use it from any browser supporting WebSocket. Breakpoints, profiler, livecoding, etc... It is really awesome.
Install it with:
npm install -g node-inspector
Then run:
node-debug app.js
Debugging
Joyent's Guide
Debugger
Node Inspector
Visual Studio Code
Cloud9
Brackets
Profiling
node --prof ./app.js
node --prof-process ./the-generated-log-file
Heapdumps
node-heapdump with Chrome Developer Tools
Flamegraphs
0x
jam3/devtool then Chrome Developer Tools Flame Charts
Dtrace and StackVis — Only supported on SmartOS
clinicjs
Tracing
Interactive Stack Traces with TraceGL
Logging
Libraries that output debugging information
Caterpillar
Tracer
scribbles
Libraries that enhance stack trace information
Longjohn
Benchmarking
Apache Bench: ab -n 100000 -c 1 http://127.0.0.1:9778/
wrk
Other
Trace
Vantage
Bugger
Google Tracing Framework
Paul Irish's Guide
Legacy
These use to work but are no longer maintained or no longer applicable to modern node versions.
https://github.com/bnoordhuis/node-profiler - replaced by built-in debugging
https://github.com/c4milo/node-webkit-agent - replaced by node inspector
https://nodetime.com/ - defunct
The V8 debugger released as part of the Google Chrome Developer Tools can be used to debug Node.js scripts. A detailed explanation of how this works can be found in the Node.js GitHub wiki.
Node has its own built in GUI debugger as of version 6.3 (using Chrome's DevTools)
Simply pass the inspector flag and you'll be provided with a URL to the inspector:
node --inspect server.js
You can also break on the first line by passing --inspect-brk instead.
Node.js version 0.3.4+ has built-in debugging support.
node debug script.js
Manual: http://nodejs.org/api/debugger.html
Visual Studio Code will be my choice for debugging. No overhead of installing any tools or npm install stuff.
Just set the starting point of your app in package.json and VSCode will automatically create a configuration file inside your solution. It's build on Electron, on which editors like Atom are built.
VS Code gives similar debugging experience as you might have
had in other IDEs like VS, Eclipse, etc.
I personally use JetBrains WebStorm as it's the only JavaScript IDE that I've found which is great for both frontend and backend JavaScript.
It works on multiple OS's and has Node.js debugging built-in (as well as a ton of other stuff](http://www.jetbrains.com/webstorm/features/index.html).
My only 'issues'/wishlist items are were:
It seems to be more resource hungry on Mac than Windows It no longer seems an issue in version 6.
It would be nice if it had Snippet support (like those of Sublime Text 2 - i.e. type 'fun' and tap 'tab' to put in a function. See #WickyNilliams comment below - With Live Templates you also have snippet support.
A lot of great answers here, but I'd like to add my view (based on how my approach evolved)
Debug Logs
Let's face it, we all love a good console.log('Uh oh, if you reached here, you better run.') and sometimes that works great, so if you're reticent to move too far away from it at least add some bling to your logs with Visionmedia's debug.
Interactive Debugging
As handy as console logging can be, to debug professionally you need to roll up your sleeves and get stuck in. Set breakpoints, step through your code, inspect scopes and variables to see what's causing that weird behaviour. As others have mentioned, node-inspector really is the bees-knees. It does everything you can do with the built-in debugger, but using that familiar Chrome DevTools interface.
If, like me, you use Webstorm, then here is a handy guide to debugging from there.
Stack Traces
By default, we can't trace a series of operations across different cycles of the event loop (ticks). To get around this have a look at longjohn (but not in production!).
Memory Leaks
With Node.js we can have a server process expected to stay up for considerable time. What do you do if you think it has sprung some nasty leaks? Use heapdump and Chrome DevTools to compare some snapshots and see what's changing.
For some useful articles, check out
RisingStack - Debugging Node.js Applications
Excellent article by David Mark Clements of nearForm
If you feel like watching a video(s) then
Netflix JS Talks - Debugging Node.js in Production
Interesting video from the tracing working group on tracing and debugging node.js
Really informative 15-minute video on node-inspector
Whatever path you choose, just be sure you understand how you are debugging
It is a painful thing
To look at your own trouble and know
That you yourself and no one else has made it
Sophocles, Ajax
Theseus is a project by Adobe research which lets you debug your Node.js code in their Open Source editor Brackets. It has some interesting features like real-time code coverage, retroactive inspection, asynchronous call tree.
Node.js Tools for Visual Studio 2012 or 2013 includes a debugger. The overview here states "Node.js Tools for Visual Studio includes complete support for debugging node apps.". Being new to Node.js, but having a background in .NET, I've found this add in to be a great way to debug Node.js applications.
Visual Studio Code has really nice Node.js debugging support. It is free, open source and cross-platform and runs on Linux, OS X and Windows.
You can even debug grunt and gulp tasks, should you need to...
I wrote a different approach to debug Node.js code which is stable and is extremely simple. It is available at https://github.com/s-a/iron-node.
An opensource cross-platform visual debugger.
Installation:
npm install iron-node -g;
Debug:
iron-node yourscript.js;
I created a neat little tool called pry.js that can help you out.
Put a simple statement somewhere in your code, run your script normally and node will halt the current thread giving you access to all your variables and functions. View/edit/delete them at will!
var pry = require('pryjs')
class FizzBuzz
run: ->
for i in [1..100]
output = ''
eval(pry.it) // magic
output += "Fizz" if i % 3 is 0
output += "Buzz" if i % 5 is 0
console.log output || i
bar: ->
10
fizz = new FizzBuzz()
fizz.run()
If you are using the Atom IDE, you can install the node-debugger package.
Using Chrome Version 67.0.3396.62(+)
Run node app
node --inspect-brk=0.0.0.0:9229 server.js(server js filename)
Browse your app in chrome e.g. "localhost:port"
Open DevTools.
Click the the node icon beside the responsive device icon.
There will be another DevTools window that will pop out specifically for debugging node app.
There is built-in command line debugger client within Node.js. Cloud 9 IDE have also pretty nice (visual) debugger.
I put together a short Node.js debugging primer on using the node-inspector for those who aren't sure where to get started.
Visual Studio Code will work for us in debugging.
Use Webstorm! It's perfect for debugging Node.js applications. It has a built-in debugger. Check out the docs here: https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html
If you need a powerful logging library for Node.js, Tracer https://github.com/baryon/tracer is a better choice.
It outputs log messages with a timestamp, file name, method name, line number, path or call stack, support color console, and support database, file, stream transport easily. I am the author.
Assuming you have node-inspector installed on your computer (if not, just type 'npm install -g node-inspector') you just have to run:
node-inspector & node --debug-brk scriptFileName.js
And paste the URI from the command line into a WebKit (Chrome / Safari) browser.
Just for completeness:
The PyCharm 3.0 + Node.js Plugin offers an awesome development + run + debug experience.
Start your node process with --inspect flag.
node --inspect index.js
and then Open chrome://inspect in chrome. Click the "Open dedicated DevTools for Node" link or install this chrome extension for easily opening chrome DevTools.
For more info refer to this link
There is the new open-source Nodeclipse project (as a Eclipse plugin or Enide Studio):
Nodeclipse became #1 in Eclipse Top 10 NEW Plugins for 2013. It uses a modified V8 debugger (from Google Chrome Developer Tools for Java).
Nodeclipse is free open-source software released at the start of every month.
There are many possibilities...
node includes a debugging utility
node-inspector
Code editors / IDEs (see debug instructions for one of the following)
Atom,
VSCode
Webstorm
and more
Debug support is often implemented using the v8 Debugging Protocol or the newer Chrome Debugging Protocol.
IntelliJ works wonderfully for Node.js.
In addition, IntelliJ supports 'Code Assistance' well.
The NetBeans IDE has had Node.js support since version 8.1:
<...>
New Feature Highlights
Node.js Application Development
New Node.js project wizard
New Node.js Express wizard
Enhanced JavaScript Editor
New support for running Node.js applications
New support for debugging Node.js applications.
<...>
Additional references:
NetBeans Wiki / NewAndNoteworthyNB81.
Node.js Express App in NetBeans IDE, Geertjan-Oracle.
Use this commands
DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
ndb is an improved debugging experience for Node.js, enabled by Chrome DevTools
https://github.com/GoogleChromeLabs/ndb
node-debug -p 8888 scriptFileName.js
I am trying to write some mex code but it is painful to debug it on the console with gbd. Is it possible to use Eclipse or the GUI of Matlab? If these are not feasible methods, what is the best way of writing mex code that provides good debug capabilities?
Debugging C/C++ MEX files in gdb is already comprehensively covered in the official documentation, so my suggestion is to try and integrate gdb with Eclipse CDT.
There's plenty of information out there about how to do it properly, so I'm not going to repeat everything here. The best tutorial I know is IBM's two-part guide, "Interfacing with the CDT debugger":
Part 1: Understand the C/C++ debugger interface - covers the high-level basics.
Part 2: Accessing gdb with the Eclipse CDT and MI - explains how to make Eclipse work with gdb.
I think part 2 is what you really need. Basically, you have to install a plug-in and configure it in Eclipse.
There are also quite a few related questions about this even here on StackOverflow:
How do I use GDB in Eclipse for C/C++ Debugging?
How to install GDB debugger to Eclipse CDT
Debugging with Eclipse CDT and GDB
How can I enter commands to a gdb prompt while debugging with Eclipse CDT?
I haven't tried it out yet, so I hope this works.
On Windows platform:
The best way (to my experience) to debug a mex code is to use Visual studio.
Here's a link on how to do it.
Other platforms (Linux/Mac):
I'm afraid I haven't find any good way to do so apart from gdb (which is not fun at all).
Update (2018):
Recently, Mathworks released a blog post describing how to use Visual Studio Code to debug mex code.
I haven't tried it myself, but it seems like a nice cross-platform solution for debugging mex files.
Here is my solution which works in Ubuntu 12.04, Matlab R2012b, and Eclipse IDE for C/C++ Developers Kepler Release.
In Eclipse open "Debug Configurations" from the run tab. Then make a new "C/C++ Application".
In the "Main"-tab write the correct path to the matlab executable in the "C/C++ Application" (mine is "/usr/local/MATLAB/R2012b/bin/glnxa64/MATLAB" NOTE: not MATLABPATH/bin/matlab).
In the "Arguments"-tab add "-nojvm" as program arguments.
In the "Environment"-tab add variable "MATLAB_DEBUG" with value "gdb"
Press "Apply" and "Debug"
A "Matlab console" will open in the "Console" view.
Write "dbmex on" in this console. This enables debugging.
Run the mex file! (Matlab will stop at loading of each new mex file)
Have fun debugging! :-)
Any suggestions? Code and artwork/assets are all in SVN, and we don't want to port it to GCC or another compiler before anyone suggests it!
Simplicity and minimising 3rd-party tools is preferred, since we don't have a build-server it'll probably still be run on a developer's PC but we don't want them just doing a build manually and packaging it up.
It's basically just a C++ solution with several projects, plus we have an Inno Setup installer to build.
Right now it's a 3-step process (or 4 if you include uploading the release to FTP):
Get from SVN
Build solution from VC++
Run Inno to create the packaged
installer
You can use MSVC pre, post & custom build steps to do this, they run programs through the windows command line. also see this: http://blogs.msdn.com/b/visualstudio/archive/2010/04/26/custom-build-steps-tools-and-events.aspx
If you can't do it with the VS build steps (see Necrolis' answer), then in the past I've used makefiles run with nmake, which is included with VS (you need to start a command prompt with the right environment settings for VS - there's a shortcut on the start menu.)
Nowadays I use FinalBuilder ( http://www.finalbuilder.com/home.aspx ) for all this sort of stuff, which is expensive and doesn't meet your 'not 3rd party' desire, but is an excellent tool. Once you get into it, you'll realise that there are probably far more steps you'd like to do than merely compiling/packaging - you probably want to be incrementing version numbers, moving files around, creating directories, etc. FB is good at that sort of stuff.
I am adding up to date answer for other users:
Currently there is 3rd party extension available which integrates Inno Setup into Visual Studio and allows you to build installers directly from IDE (or from command line using MSBuild).
It is possible to use pre, post & custom build steps, batch files, code signing, running programs through the windows command line etc.
Check Visual Studio Marketplace for more info about Visual & Installer: https://marketplace.visualstudio.com/items?itemName=unSignedsro.VisualInstaller
I've never developed Flash before but I have a project where I want to use an ActionScript 3 library and I'm not sure what tools I need to start. To further complicate things my main development box is an Ubuntu box. Are there any necessary packages I need to install? Or any .deb's I can buy?
A Windows or Mac box. :-)
just kidding, actually you can use the Flex 3 SDK mentioned above and compile using the CLI. If these AS3 Libraries are indeed Flex libraries (sometimes there are discrepancies between what works in Flex, what works in CS3, and what works in both) then you should be able to import them and use them.
Also, I've never tried it myself, but Flex Builder is based on Eclipse and I believe there's a way to configure Eclipse to compile with the opensource Flex compile if you'd rather work in a graphical IDE.
I have written a blog entry on how to setup Eclipse + AXDT + Flex SDK to prepare your mxml/actionscript (as3) development environment on Linux. If you are interested, you can have a look here:
http://netpatia.blogspot.com/2009/09/flash-development-on-linux.html
It looks like the Flex 3 sdk (http://www.adobe.com/products/flex/flexdownloads/index.html) is a good place to start. Any other suggestions?
I've had very good experiences with Sprouts. It is a ruby wrapper for the Flex SDK that allows building with Rake and easily hooks into continuous integration engines.
http://www.projectsprouts.com/
I've been using Flex Builder Linux recently and can recommend it. It's straightforward to get going and, for an alpha, is stable and has all the features you could want.
JetBrains IntelliJ IDEA (not free)
http://www.jetbrains.com/idea/features/flex_ide.html
JetBrains Astella (free but beta)
http://blog.jetbrains.com/astella/
http://confluence.jetbrains.com/display/AS/Astella+EAP
Project Sprouts is probably going to be the quickest way to get up and running with ActionScript or Flex development on any operating system, but especially on Linux.
You'll need to install Ruby and RubyGems, other than that, it's a couple of terminal commands and you should have an application building and displaying.
You should be able to build ActionScript 2, ActionScript 3, AIR or Flex Projects without any manual system configuration at all. Because Sprouts is inherently a CLI application, you can use any development environment you prefer and initiate your builds with simple commands like:
Compile and run debug build
rake debug
Compile and run test harness
rake test
Compile an optimized build for deployment
rake deploy
Compile your application as a library
rake swc
Generate documentation for your application
rake doc
Of course you can easily create or customize your build scripts using Rake, an amazingly simple and flexible build script engine.
Like Rails, Sprouts also comes standard with code generators that automatically create classes, test cases, test suites and even MXML components.
Unlike many open-source projects, Sprouts includes some pretty extensive and detailed documentation.
Let us know what you think.
http://projectsprouts.org
You could try Haxe. It isn't really ActionScript but it is very similar (and you could also compile to the server side or JavaScript).
While FlexBuilder is good, it lacks many of the features that Powerflasher includes in FDT (Flash Developer Tools) for Eclipse. FlexBuilder is missing things like Templates, better formatting, auto-fixing of warnings and errors. It runs on Eclipse making it cross platform, but be warned that they do not test in a linux environment (however people have had no significant complaints).
See all the features here: http://solutions.powerflasher.com/index.php?id=136#feature_03
I use the Flex SDK, Emacs (Sub your editor of choice) and Ant as my build tool. I blogged about how to get everything set up here:
http://blog.apterainc.com/software/setting-up-a-flex-development-enviroment-in-gnulinux/
Adobe has an free alpha release of FlexBuilder for Linux, I thought it was quite unstable when editing MXML files, but if your doing strict actionscript work, you may find it useful. you can get that here:
http://labs.adobe.com/technologies/flex/flexbuilder_linux/
You might like to have a look at MTASC
http://www.mtasc.org/
An open source action script compiler. I've been meaning to get around to looking at it but not had the chance yet. Heard great things about it tho.
Hopefully when I do get around to it and have questions you'll be around to answer them