| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  | // Copyright (c) 2014 GitHub, Inc.
 | 
					
						
							|  |  |  | // Use of this source code is governed by the MIT license that can be
 | 
					
						
							|  |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "atom/browser/node_debugger.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "base/command_line.h"
 | 
					
						
							| 
									
										
										
										
											2017-05-15 11:16:32 -07:00
										 |  |  | #include "base/strings/utf_string_conversions.h"
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  | #include "libplatform/libplatform.h"
 | 
					
						
							| 
									
										
										
										
											2017-05-16 14:50:49 -07:00
										 |  |  | #include "native_mate/dictionary.h"
 | 
					
						
							| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace atom { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  | NodeDebugger::NodeDebugger(node::Environment* env) : env_(env) { | 
					
						
							| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NodeDebugger::~NodeDebugger() { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  | void NodeDebugger::Start() { | 
					
						
							|  |  |  |   auto inspector = env_->inspector_agent(); | 
					
						
							|  |  |  |   if (inspector == nullptr) | 
					
						
							| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  |     return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  |   node::DebugOptions options; | 
					
						
							| 
									
										
										
										
											2017-05-15 11:16:32 -07:00
										 |  |  |   for (auto& arg : base::CommandLine::ForCurrentProcess()->argv()) { | 
					
						
							|  |  |  | #if defined(OS_WIN)
 | 
					
						
							|  |  |  |     options.ParseOption(base::UTF16ToUTF8(arg)); | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  |     options.ParseOption(arg); | 
					
						
							| 
									
										
										
										
											2017-05-15 11:16:32 -07:00
										 |  |  | #endif
 | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  |   if (options.inspector_enabled()) { | 
					
						
							|  |  |  |     // Use custom platform since the gin platform does not work correctly
 | 
					
						
							|  |  |  |     // with node's inspector agent
 | 
					
						
							|  |  |  |     platform_.reset(v8::platform::CreateDefaultPlatform()); | 
					
						
							| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-16 14:50:49 -07:00
										 |  |  |     // Set process._debugWaitConnect if --inspect-brk was specified to stop
 | 
					
						
							|  |  |  |     // the debugger on the first line
 | 
					
						
							|  |  |  |     if (options.wait_for_connect()) { | 
					
						
							|  |  |  |       mate::Dictionary process(env_->isolate(), env_->process_object()); | 
					
						
							|  |  |  |       process.Set("_debugWaitConnect", true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-15 09:30:55 -07:00
										 |  |  |     inspector->Start(platform_.get(), nullptr, options); | 
					
						
							| 
									
										
										
										
											2015-08-27 12:25:28 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace atom
 |