Browse Source

More debug output when building (trying to find the cause of SD2-1485).

Run IProject.StartBuild on its own thread, so it runs outside of any locks taken by the build engine.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3763 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
885afa299e
  1. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  2. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  3. 6
      src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs
  4. 1
      src/Main/Base/Project/Configuration/AssemblyInfo.cs
  5. 4
      src/Main/Base/Project/Src/Gui/Workbench/SingleInstanceHelper.cs
  6. 14
      src/Main/Base/Project/Src/Project/BuildEngine.cs
  7. 2
      src/Main/Base/Project/Src/Project/IBuildFeedbackSink.cs
  8. 6
      src/Main/Base/Project/Src/Project/MSBuildEngine.cs
  9. 2
      src/Main/Core/Project/Configuration/AssemblyInfo.cs
  10. 2
      src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs
  11. 9
      src/Main/ICSharpCode.Core.WinForms/Properties/AssemblyInfo.cs
  12. 2
      src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarCommand.cs
  13. 5
      src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs
  14. 2
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Configuration/AssemblyInfo.cs
  15. 6
      src/Main/StartUp/Project/app.template.config

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -88,7 +88,7 @@ namespace CSharpBinding
public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink) public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{ {
if (this.MinimumSolutionVersion == 9) { if (this.MinimumSolutionVersion == Solution.SolutionVersionVS2005) {
MSBuildEngine.StartBuild(this, MSBuildEngine.StartBuild(this,
options, options,
feedbackSink, feedbackSink,

2
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -109,7 +109,7 @@ namespace VBNetBinding
public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink) public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{ {
if (this.MinimumSolutionVersion == 9) { if (this.MinimumSolutionVersion == Solution.SolutionVersionVS2005) {
MSBuildEngine.StartBuild(this, MSBuildEngine.StartBuild(this,
options, options,
feedbackSink, feedbackSink,

6
src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs

@ -107,6 +107,12 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
TestProgram("public class Foo<T> where T : IDisposable, ICloneable { }"); TestProgram("public class Foo<T> where T : IDisposable, ICloneable { }");
} }
[Test]
public void InterfaceWithOutParameters()
{
TestProgram("public interface ITest { void Method(out int a, ref double b); }");
}
[Test] [Test]
public void GenericClassDefinitionWithBaseType() public void GenericClassDefinitionWithBaseType()
{ {

1
src/Main/Base/Project/Configuration/AssemblyInfo.cs

@ -20,6 +20,7 @@ using System.Runtime.CompilerServices;
[assembly: Dependency("ICSharpCode.NRefactory", LoadHint.Always)] [assembly: Dependency("ICSharpCode.NRefactory", LoadHint.Always)]
[assembly: Dependency("ICSharpCode.SharpDevelop.Dom", LoadHint.Always)] [assembly: Dependency("ICSharpCode.SharpDevelop.Dom", LoadHint.Always)]
[assembly: Dependency("ICSharpCode.SharpDevelop.Widgets", LoadHint.Always)] [assembly: Dependency("ICSharpCode.SharpDevelop.Widgets", LoadHint.Always)]
[assembly: Dependency("System.Core", LoadHint.Always)]
[assembly: Dependency("System.Drawing", LoadHint.Always)] [assembly: Dependency("System.Drawing", LoadHint.Always)]
[assembly: Dependency("System.Xml", LoadHint.Always)] [assembly: Dependency("System.Xml", LoadHint.Always)]
[assembly: Dependency("System.Windows.Forms", LoadHint.Always)] [assembly: Dependency("System.Windows.Forms", LoadHint.Always)]

4
src/Main/Base/Project/Src/Gui/Workbench/SingleInstanceHelper.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public static bool OpenFilesInPreviousInstance(string[] fileList) public static bool OpenFilesInPreviousInstance(string[] fileList)
{ {
LoggingService.Debug("Trying to pass arguments to previous instance..."); LoggingService.Info("Trying to pass arguments to previous instance...");
int currentProcessId = Process.GetCurrentProcess().Id; int currentProcessId = Process.GetCurrentProcess().Id;
string currentFile = Assembly.GetEntryAssembly().Location; string currentFile = Assembly.GetEntryAssembly().Location;
int number = new Random().Next(); int number = new Random().Next();
@ -65,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Gui
return false; return false;
long fileNumber = m.WParam.ToInt64(); long fileNumber = m.WParam.ToInt64();
long openEvenIfProjectIsOpened = m.LParam.ToInt64(); long openEvenIfProjectIsOpened = m.LParam.ToInt64();
LoggingService.Debug("Receiving custom message..."); LoggingService.Info("Receiving custom message...");
if (openEvenIfProjectIsOpened == 0 && ProjectService.OpenSolution != null) { if (openEvenIfProjectIsOpened == 0 && ProjectService.OpenSolution != null) {
m.Result = new IntPtr(RESULT_PROJECT_IS_OPEN); m.Result = new IntPtr(RESULT_PROJECT_IS_OPEN);
} else { } else {

14
src/Main/Base/Project/Src/Project/BuildEngine.cs

@ -107,7 +107,7 @@ namespace ICSharpCode.SharpDevelop.Project
EventHandler eh = null; EventHandler eh = null;
lock (lockObject) { lock (lockObject) {
if (isCancelAllowed && !isCancelled) { if (isCancelAllowed && !isCancelled) {
ICSharpCode.Core.LoggingService.Debug("Cancel build"); ICSharpCode.Core.LoggingService.Info("Cancel build");
isCancelled = true; isCancelled = true;
eh = Cancelled; eh = Cancelled;
} }
@ -261,6 +261,11 @@ namespace ICSharpCode.SharpDevelop.Project
this.project = project; this.project = project;
} }
public void DoStartBuild(object state)
{
project.StartBuild(options, this);
}
public void ReportError(BuildError error) public void ReportError(BuildError error)
{ {
engine.ReportError(this, error); engine.ReportError(this, error);
@ -416,7 +421,7 @@ namespace ICSharpCode.SharpDevelop.Project
hasDependencyErrors |= n.hasErrors; hasDependencyErrors |= n.hasErrors;
} }
ICSharpCode.Core.LoggingService.Debug("Start building " + node.project.Name); ICSharpCode.Core.LoggingService.Info("Start building " + node.project.Name);
runningWorkers++; runningWorkers++;
projectsCurrentlyBuilding.Add(node); projectsCurrentlyBuilding.Add(node);
if (hasDependencyErrors) { if (hasDependencyErrors) {
@ -424,7 +429,8 @@ namespace ICSharpCode.SharpDevelop.Project
node.hasErrors = true; node.hasErrors = true;
node.Done(false); node.Done(false);
} else { } else {
node.project.StartBuild(node.options, node); // do not run "DoStartBuild" inside lock - run it async on the thread pool
System.Threading.ThreadPool.QueueUserWorkItem(node.DoStartBuild);
} }
} }
} }
@ -458,7 +464,7 @@ namespace ICSharpCode.SharpDevelop.Project
void OnBuildFinished(BuildNode node, bool success) void OnBuildFinished(BuildNode node, bool success)
{ {
ICSharpCode.Core.LoggingService.Debug("Finished building " + node.project.Name); ICSharpCode.Core.LoggingService.Info("Finished building " + node.project.Name);
lock (this) { lock (this) {
if (node.buildFinished) { if (node.buildFinished) {
throw new InvalidOperationException("This node already finished building, do not call IBuildFeedbackSink.Done() multiple times!"); throw new InvalidOperationException("This node already finished building, do not call IBuildFeedbackSink.Done() multiple times!");

2
src/Main/Base/Project/Src/Project/IBuildFeedbackSink.cs

@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary> /// <summary>
/// Notifies the build engine that the build of a project has finished. /// Notifies the build engine that the build of a project has finished.
/// You sould not call any methods after the Done() call. /// You should not call any methods after the Done() call.
/// This member is thread-safe. /// This member is thread-safe.
/// </summary> /// </summary>
void Done(bool success); void Done(bool success);

6
src/Main/Base/Project/Src/Project/MSBuildEngine.cs

@ -224,6 +224,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (buildInProcess) { if (buildInProcess) {
settings.BuildDoneCallback = delegate(bool success) { settings.BuildDoneCallback = delegate(bool success) {
LoggingService.Debug("BuildInProcess: Received BuildDoneCallback");
if (Interlocked.Exchange(ref isBuildingInProcess, 0) != 1) { if (Interlocked.Exchange(ref isBuildingInProcess, 0) != 1) {
MessageService.ShowError("isBuildingInProcess should have been 1!"); MessageService.ShowError("isBuildingInProcess should have been 1!");
} }
@ -233,15 +234,18 @@ namespace ICSharpCode.SharpDevelop.Project
Thread thread = new Thread(new ThreadStart( Thread thread = new Thread(new ThreadStart(
delegate { delegate {
LoggingService.Debug("Acquiring InProcessMSBuildLock");
lock (MSBuildInternals.InProcessMSBuildLock) { lock (MSBuildInternals.InProcessMSBuildLock) {
WorkerManager.RunBuildInProcess(job, settings); WorkerManager.RunBuildInProcess(job, settings);
LoggingService.Debug("Leaving InProcessMSBuildLock");
} }
})); }));
thread.Name = "InProcess build thread"; thread.Name = "InProcess build thread " + thread.ManagedThreadId;
thread.SetApartmentState(ApartmentState.STA); thread.SetApartmentState(ApartmentState.STA);
thread.Start(); thread.Start();
} else { } else {
settings.BuildDoneCallback = delegate(bool success) { settings.BuildDoneCallback = delegate(bool success) {
LoggingService.Debug("BuildOutOfProcess: Received BuildDoneCallback");
logger.FlushCurrentError(); logger.FlushCurrentError();
feedbackSink.Done(success); feedbackSink.Done(success);
}; };

2
src/Main/Core/Project/Configuration/AssemblyInfo.cs

@ -12,6 +12,8 @@ using System.Runtime.CompilerServices;
[assembly: CLSCompliant(true)] [assembly: CLSCompliant(true)]
[assembly: StringFreezing()] [assembly: StringFreezing()]
[assembly: Dependency("System.Xml", LoadHint.Always)]
[assembly: AssemblyTitle("ICSharpCode.Core")] [assembly: AssemblyTitle("ICSharpCode.Core")]
[assembly: AssemblyDescription("The ICSharpCode Core containing the AddInTree and service Subsystem")] [assembly: AssemblyDescription("The ICSharpCode Core containing the AddInTree and service Subsystem")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]

2
src/Main/ICSharpCode.Core.WinForms/Menu/MenuCommand.cs

@ -115,7 +115,7 @@ namespace ICSharpCode.Core.WinForms
if (GetVisible() && Enabled) { if (GetVisible() && Enabled) {
ICommand cmd = Command; ICommand cmd = Command;
if (cmd != null) { if (cmd != null) {
LoggingService.Debug("Run command " + cmd.GetType().FullName); LoggingService.Info("Run command " + cmd.GetType().FullName);
cmd.Run(); cmd.Run();
} }
} }

9
src/Main/ICSharpCode.Core.WinForms/Properties/AssemblyInfo.cs

@ -12,8 +12,13 @@ using System.Runtime.CompilerServices;
[assembly: CLSCompliant(true)] [assembly: CLSCompliant(true)]
[assembly: StringFreezing()] [assembly: StringFreezing()]
[assembly: AssemblyTitle("ICSharpCode.Core")] [assembly: Dependency("ICSharpCode.Core", LoadHint.Always)]
[assembly: AssemblyDescription("The ICSharpCode Core containing the AddInTree and service Subsystem")] [assembly: Dependency("System.Xml", LoadHint.Always)]
[assembly: Dependency("System.Drawing", LoadHint.Always)]
[assembly: Dependency("System.Windows.Forms", LoadHint.Always)]
[assembly: AssemblyTitle("ICSharpCode.Core.WinForms")]
[assembly: AssemblyDescription("Windows Forms binding for ICSharpCode.Core")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]

2
src/Main/ICSharpCode.Core.WinForms/ToolBar/ToolBarCommand.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.Core.WinForms
} }
if (menuCommand != null) { if (menuCommand != null) {
menuCommand.Owner = caller; menuCommand.Owner = caller;
LoggingService.Debug("Run command " + menuCommand.GetType().FullName); LoggingService.Info("Run command " + menuCommand.GetType().FullName);
menuCommand.Run(); menuCommand.Run();
} }
} }

5
src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs

@ -151,7 +151,7 @@ namespace ICSharpCode.SharpDevelop.BuildWorker
| ToolsetDefinitionLocations.ConfigurationFile); | ToolsetDefinitionLocations.ConfigurationFile);
engine.RegisterLogger(new ForwardingLogger(this)); engine.RegisterLogger(new ForwardingLogger(this));
engine.RegisterLogger(new ConsoleLogger(LoggerVerbosity.Diagnostic)); //engine.RegisterLogger(new ConsoleLogger(LoggerVerbosity.Diagnostic));
return engine; return engine;
} }
@ -209,13 +209,16 @@ namespace ICSharpCode.SharpDevelop.BuildWorker
engine.GlobalProperties.SetProperty(pair.Key, pair.Value); engine.GlobalProperties.SetProperty(pair.Key, pair.Value);
} }
Log("Loading " + currentJob.ProjectFileName);
Project project = LoadProject(engine, currentJob.ProjectFileName); Project project = LoadProject(engine, currentJob.ProjectFileName);
if (project == null) if (project == null)
return false; return false;
if (string.IsNullOrEmpty(currentJob.Target)) { if (string.IsNullOrEmpty(currentJob.Target)) {
Log("Building default target in " + currentJob.ProjectFileName);
return engine.BuildProject(project); return engine.BuildProject(project);
} else { } else {
Log("Building target '" + currentJob.Target + "' in " + currentJob.ProjectFileName);
return engine.BuildProject(project, currentJob.Target.Split(';')); return engine.BuildProject(project, currentJob.Target.Split(';'));
} }
} }

2
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Configuration/AssemblyInfo.cs

@ -13,6 +13,8 @@ using System.Security.Permissions;
[assembly: CLSCompliant(true)] [assembly: CLSCompliant(true)]
[assembly: StringFreezing()] [assembly: StringFreezing()]
[assembly: Dependency("System.Core", LoadHint.Always)]
[assembly: AssemblyTitle("ICSharpCode.SharpDevelop.Dom")] [assembly: AssemblyTitle("ICSharpCode.SharpDevelop.Dom")]
[assembly: AssemblyDescription("Code-completion library")] [assembly: AssemblyDescription("Code-completion library")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]

6
src/Main/StartUp/Project/app.template.config

@ -96,6 +96,12 @@
</layout> </layout>
</appender> </appender>
<appender name="DebugAppender" type="log4net.Appender.OutputDebugStringAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%thread] %-5level- %message%newline" />
</layout>
</appender>
<appender name="FileAppender" type="log4net.Appender.FileAppender"> <appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="SharpDevelopLog.txt" /> <file value="SharpDevelopLog.txt" />
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">

Loading…
Cancel
Save