Browse Source

Fixed SD2-649: Breakpoint within anonymous delegate method causes COMException

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1081 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
David Srbecký 20 years ago
parent
commit
0c46d5169c
  1. 24
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Modules/Module.cs

24
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Modules/Module.cs

@ -144,12 +144,21 @@ namespace Debugger
fullPath = Marshal.PtrToStringUni(pString); fullPath = Marshal.PtrToStringUni(pString);
Marshal.FreeHGlobal(pString); Marshal.FreeHGlobal(pString);
string tempPath = Path.Combine(Path.GetTempPath(), Path.Combine("DebeggerPdb", new Random().Next().ToString()));
string pdbFilename = Path.GetFileNameWithoutExtension(FullPath) + ".pdb";
string oldPdbPath = Path.Combine(Path.GetDirectoryName(FullPath), pdbFilename);
string newPdbPath = Path.Combine(tempPath, pdbFilename);
if (File.Exists(oldPdbPath)) {
Directory.CreateDirectory(tempPath);
File.Move(oldPdbPath, newPdbPath);
}
fullPathPDB = newPdbPath;
SymBinder symBinder = new SymBinder(); SymBinder symBinder = new SymBinder();
IntPtr ptr = IntPtr.Zero; IntPtr ptr = IntPtr.Zero;
try { try {
ptr = Marshal.GetIUnknownForObject(metaDataInterface); ptr = Marshal.GetIUnknownForObject(metaDataInterface);
symReader = (SymReader)symBinder.GetReader(ptr, fullPath, string.Empty); symReader = (SymReader)symBinder.GetReader(ptr, fullPath, tempPath);
} catch (System.Exception) { } catch (System.Exception) {
symReader = null; symReader = null;
} finally { } finally {
@ -158,17 +167,8 @@ namespace Debugger
} }
} }
if (symReader != null) { if (File.Exists(newPdbPath)) {
string tempPath = Path.Combine(Path.GetTempPath(), Path.Combine("DebeggerPdb", new Random().Next().ToString())); File.Copy(newPdbPath, oldPdbPath);
string pdbFilename = Path.GetFileNameWithoutExtension(FullPath) + ".pdb";
string oldPdbPath = Path.Combine(Path.GetDirectoryName(FullPath), pdbFilename);
string newPdbPath = Path.Combine(tempPath, pdbFilename);
Directory.CreateDirectory(tempPath);
File.Copy(oldPdbPath, newPdbPath);
symReader.UpdateSymbolStore(newPdbPath, IntPtr.Zero);
fullPathPDB = newPdbPath;
} }
JMCStatus = SymbolsLoaded; JMCStatus = SymbolsLoaded;

Loading…
Cancel
Save