Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1428)

Side by Side Diff: visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/PluginDebuggerGDB.cs

Issue 11266051: Add PNaCl support for VS addin. (Closed) Base URL: http://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: fix nits and tests Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 namespace NativeClientVSAddIn 5 namespace NativeClientVSAddIn
6 { 6 {
7 using System; 7 using System;
8 using System.IO; 8 using System.IO;
9 using System.Text; 9 using System.Text;
10 using System.Windows.Forms; 10 using System.Windows.Forms;
11 using System.Diagnostics; 11 using System.Diagnostics;
12 12
13 using EnvDTE; 13 using EnvDTE;
14 using EnvDTE80; 14 using EnvDTE80;
15 15
16 /// <summary> 16 /// <summary>
17 /// This class handles the details of finding a nexe and attaching to it. 17 /// This class handles the details of finding a nexe and attaching to it.
18 /// </summary> 18 /// </summary>
19 public class PluginDebuggerGDB : PluginDebuggerBase 19 public class PluginDebuggerGDB : PluginDebuggerBase
20 { 20 {
21 /// <summary> 21 /// <summary>
22 /// Path to the actual plug-in assembly. 22 /// Path to the actual nexe.
23 /// </summary> 23 /// </summary>
24 private string pluginAssembly_; 24 private string targetNexe_;
25 25
26 /// <summary> 26 /// <summary>
27 /// Directory of the plug-in project we are debugging. 27 /// Directory of the project we are debugging.
28 /// </summary> 28 /// </summary>
29 private string pluginProjectDirectory_; 29 private string projectDirectory_;
30 30
31 /// <summary> 31 /// <summary>
32 /// Path to the NaCl IRT. 32 /// Path to the NaCl IRT.
33 /// </summary> 33 /// </summary>
34 private string irtPath_; 34 private string irtPath_;
35 35
36 /// <summary> 36 /// <summary>
37 /// Path to the project's nmf file. 37 /// Path to the project's nmf file.
38 /// </summary> 38 /// </summary>
39 private string manifestPath_; 39 private string manifestPath_;
(...skipping 14 matching lines...) Expand all
54 private string gdbInitFileName_; 54 private string gdbInitFileName_;
55 55
56 /// <summary> 56 /// <summary>
57 /// Constructs the PluginDebuggerHelper. 57 /// Constructs the PluginDebuggerHelper.
58 /// </summary> 58 /// </summary>
59 /// <param name="dte">Automation object from Visual Studio.</param> 59 /// <param name="dte">Automation object from Visual Studio.</param>
60 /// <param name="properties">PropertyManager pointing to a valid project/pla tform.</param> 60 /// <param name="properties">PropertyManager pointing to a valid project/pla tform.</param>
61 public PluginDebuggerGDB(DTE2 dte, PropertyManager properties) 61 public PluginDebuggerGDB(DTE2 dte, PropertyManager properties)
62 : base(dte, properties) 62 : base(dte, properties)
63 { 63 {
64 string arch = "i686"; 64 string arch = "i686";
65 if (Environment.Is64BitOperatingSystem) 65 if (Environment.Is64BitOperatingSystem)
66 { 66 {
67 arch = "x86_64"; 67 arch = "x86_64";
68 } 68 }
69 69
70 if (properties.TargetArchitecture != arch) 70 if (!properties.IsPNaCl())
71 { 71 {
72 MessageBox.Show(string.Format("Debugging of {0} NaCl modules is not poss ible on this system ({1}).", 72 if (properties.TargetArchitecture != arch)
73 properties.TargetArchitecture, arch)); 73 {
74 } 74 MessageBox.Show(string.Format("Debugging of {0} NaCl modules is not possible on this system ({1}).",
75 properties.TargetArchitecture, arc h));
76 }
77 }
75 78
76 // check chrome version 79 // check chrome version
77 string chrome_path = properties.LocalDebuggerCommand; 80 string chrome_path = properties.LocalDebuggerCommand;
78 FileVersionInfo version_info = FileVersionInfo.GetVersionInfo(chrome_path) ; 81 FileVersionInfo version_info = FileVersionInfo.GetVersionInfo(chrome_path) ;
79 string file_version = version_info.FileVersion; 82 string file_version = version_info.FileVersion;
80 if (file_version != null) 83 if (file_version != null)
81 { 84 {
82 string major_version = file_version.Split('.')[0]; 85 string major_version = file_version.Split('.')[0];
83 int major_version_int = 0; 86 int major_version_int = 0;
84 try 87 try
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 file_version, irt_basename); 123 file_version, irt_basename);
121 if (!File.Exists(irtPath_)) 124 if (!File.Exists(irtPath_))
122 { 125 {
123 MessageBox.Show("NaCl IRT not found in chrome install.\nLooking for: " + irtPath_); 126 MessageBox.Show("NaCl IRT not found in chrome install.\nLooking for: " + irtPath_);
124 irtPath_ = null; 127 irtPath_ = null;
125 } 128 }
126 } 129 }
127 } 130 }
128 131
129 manifestPath_ = properties.ManifestPath; 132 manifestPath_ = properties.ManifestPath;
130 pluginAssembly_ = properties.PluginAssembly; 133 targetNexe_ = properties.PluginAssembly;
131 pluginProjectDirectory_ = properties.ProjectDirectory; 134
135 if (properties.IsPNaCl())
136 {
137 string basename = Path.GetFileNameWithoutExtension(targetNexe_);
138 targetNexe_ = Path.Combine(Path.GetDirectoryName(targetNexe_),
139 basename + "_" + arch + ".nexe");
140
141 if (!File.Exists(targetNexe_))
142 {
143 MessageBox.Show(
144 string.Format("Failed to find nexe to debug: {0}", targetNexe_)) ;
145 }
146 }
147
148 projectDirectory_ = properties.ProjectDirectory;
132 gdbPath_ = Path.Combine( 149 gdbPath_ = Path.Combine(
133 properties.SDKRootDirectory, 150 properties.SDKRootDirectory,
134 "toolchain", 151 "toolchain",
135 string.Concat("win_x86_", properties.ToolchainName), 152 string.Concat("win_x86_", properties.ToolchainName),
136 @"bin\x86_64-nacl-gdb.exe"); 153 @"bin\x86_64-nacl-gdb.exe");
137 154
138 Debug.WriteLine("Found gdb: {0}", gdbPath_); 155 Debug.WriteLine("Found gdb: {0}", gdbPath_);
139 PluginFoundEvent += new EventHandler<PluginFoundEventArgs>(Attach); 156 PluginFoundEvent += new EventHandler<PluginFoundEventArgs>(Attach);
140 } 157 }
141 158
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 gdbInitFileName_ = Path.GetTempFileName(); 234 gdbInitFileName_ = Path.GetTempFileName();
218 StringBuilder contents = new StringBuilder(); 235 StringBuilder contents = new StringBuilder();
219 236
220 if (!string.IsNullOrEmpty(manifestPath_)) 237 if (!string.IsNullOrEmpty(manifestPath_))
221 { 238 {
222 string manifestEscaped = manifestPath_.Replace("\\", "\\\\"); 239 string manifestEscaped = manifestPath_.Replace("\\", "\\\\");
223 contents.AppendFormat("nacl-manifest {0}\n", manifestEscaped); 240 contents.AppendFormat("nacl-manifest {0}\n", manifestEscaped);
224 } 241 }
225 else 242 else
226 { 243 {
227 string pluginAssemblyEscaped = pluginAssembly_.Replace("\\", "\\\\"); 244 string pluginAssemblyEscaped = targetNexe_.Replace("\\", "\\\\");
228 contents.AppendFormat("file \"{0}\"\n", pluginAssemblyEscaped); 245 contents.AppendFormat("file \"{0}\"\n", pluginAssemblyEscaped);
229 } 246 }
230 247
231 // irtPath_ could be null if the irt nexe was not found in the chrome 248 // irtPath_ could be null if the irt nexe was not found in the chrome
232 // install. 249 // install.
233 if (irtPath_ != null) 250 if (irtPath_ != null)
234 { 251 {
235 string irtPathEscaped = irtPath_.Replace("\\", "\\\\"); 252 string irtPathEscaped = irtPath_.Replace("\\", "\\\\");
236 contents.AppendFormat("nacl-irt \"{0}\"\n", irtPathEscaped); 253 contents.AppendFormat("nacl-irt \"{0}\"\n", irtPathEscaped);
237 } 254 }
(...skipping 30 matching lines...) Expand all
268 contents.AppendLine("continue"); 285 contents.AppendLine("continue");
269 File.WriteAllText(gdbInitFileName_, contents.ToString()); 286 File.WriteAllText(gdbInitFileName_, contents.ToString());
270 287
271 // Start NaCl-GDB. 288 // Start NaCl-GDB.
272 try 289 try
273 { 290 {
274 gdbProcess_ = new System.Diagnostics.Process(); 291 gdbProcess_ = new System.Diagnostics.Process();
275 gdbProcess_.StartInfo.UseShellExecute = true; 292 gdbProcess_.StartInfo.UseShellExecute = true;
276 gdbProcess_.StartInfo.FileName = gdbPath_; 293 gdbProcess_.StartInfo.FileName = gdbPath_;
277 gdbProcess_.StartInfo.Arguments = string.Format("-x {0}", gdbInitFileNam e_); 294 gdbProcess_.StartInfo.Arguments = string.Format("-x {0}", gdbInitFileNam e_);
278 gdbProcess_.StartInfo.WorkingDirectory = pluginProjectDirectory_; 295 gdbProcess_.StartInfo.WorkingDirectory = projectDirectory_;
279 gdbProcess_.Start(); 296 gdbProcess_.Start();
280 } 297 }
281 catch (Exception e) 298 catch (Exception e)
282 { 299 {
283 MessageBox.Show( 300 MessageBox.Show(
284 string.Format("NaCl-GDB Start Failed. {0}. Path: {1}", e.Message, gd bPath_)); 301 string.Format("NaCl-GDB Start Failed. {0}. Path: {1}", e.Message, gd bPath_));
285 } 302 }
286 } 303 }
287 } 304 }
288 } 305 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698