فهرست منبع

Debugger fixes

Removing some debugger remote-requests
Brian Fiete 5 سال پیش
والد
کامیت
a32d18d962

+ 2 - 1
BeefBoot/BeefBoot.cpp

@@ -12,6 +12,7 @@
 #include "BeefySysLib/util/Deque.h"
 #include "BeefySysLib/util/HashSet.h"
 #include "BeefySysLib/util/MultiHashSet.h"
+#include "CrashCatcher.h"
 
 //#include <mmsystem.h>
 //#include <shellapi.h>
@@ -27,7 +28,7 @@ using namespace Beefy;
 BF_IMPORT void BF_CALLTYPE Debugger_ProgramDone();
 
 int main(int argc, char* argv[])
-{
+{	
 	BfpSystem_SetCommandLine(argc, argv);
 
 	BfpThread_SetName(NULL, "MainThread", NULL);

+ 3 - 5
BeefLibs/corlib/src/IO/Directory.bf

@@ -48,19 +48,17 @@ namespace System.IO
 			return .Ok;
 		}
 
-		public static Result<void> DelTree(StringView path)
+		public static Result<void, Platform.BfpFileResult> DelTree(StringView path)
 		{
 			if (path.Length <= 2)
-				return .Err;
+				return .Err(.InvalidParameter);
 			if ((path[0] != '/') && (path[0] != '\\'))
 			{
 				if (path[1] == ':')
 				{
 					if (path.Length < 3)
-						return .Err;
+						return .Err(.InvalidParameter);
 				}
-				else
-					return .Err;
 			}
 
 		    for (var fileEntry in Directory.EnumerateDirectories(path))

+ 1 - 0
BeefRT/BeefRT.vcxproj

@@ -548,6 +548,7 @@
       <OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
       <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
       <ModuleDefinitionFile>BeefRT.def</ModuleDefinitionFile>
+      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'">

+ 1 - 1
BeefTools/DocPrep/BeefProj.toml

@@ -7,4 +7,4 @@ StartupObject = "DocPrep.Program"
 [Configs.Debug.Win64]
 TargetDirectory = "$(WorkspaceDir)/../../IDE/dist"
 OtherLinkFlags = "$(LinkFlags) IDEHelper64_d.lib"
-DebugCommandArguments = "c:\\beef\\BeefLibs\\corlib\\_test c:\\beef\\hugo\\temp"
+DebugCommandArguments = "c:\\beef\\BeefLibs\\corlib\\src c:\\temp\\beefdocs"

+ 1 - 1
BeefySysLib/platform/PlatformInterface.h

@@ -290,7 +290,7 @@ enum BfpSysDirectoryKind
 	BfpSysDirectoryKind_AppData_LocalLow,
 	BfpSysDirectoryKind_AppData_Roaming,
 	BfpSysDirectoryKind_Programs,
-	BfpSysDirectoryKind_Programs_Common
+	BfpSysDirectoryKind_Programs_Common	
 };
 
 struct BfpFindFileData;

+ 20 - 1
BeefySysLib/platform/win/CrashCatcher.cpp

@@ -1,5 +1,6 @@
 #include "CrashCatcher.h"
 #include "../util/CritSect.h"
+#include "../util/Dictionary.h"
 
 USING_NS_BF;
 
@@ -593,6 +594,13 @@ static String ImageHelpWalk(PCONTEXT theContext, int theSkipCount)
 
 	CONTEXT ctx = *theContext;
 
+	struct ModuleInfo
+	{
+
+	};
+
+	Dictionary<String, ModuleInfo> moduleInfoMap;
+
 	for (;;)
 	{
 #ifdef BF64
@@ -635,7 +643,11 @@ static String ImageHelpWalk(PCONTEXT theContext, int theSkipCount)
 
 		HANDLE hProcess = GetCurrentProcess();
 
-		if (gSymGetSymFromAddr(hProcess, sf.AddrPC.Offset, &symDisplacement, pSymbol))		
+		bool forceFail = true;
+
+		
+
+		if ((gSymGetSymFromAddr(hProcess, sf.AddrPC.Offset, &symDisplacement, pSymbol)) && (!forceFail))
 		{
 			char aUDName[256];
 			gUnDecorateSymbolName(pSymbol->Name, aUDName, 256,
@@ -676,6 +688,13 @@ static String ImageHelpWalk(PCONTEXT theContext, int theSkipCount)
 			uintptr section = 0, offset = 0;
 
 			GetLogicalAddress((PVOID)sf.AddrPC.Offset, szModule, sizeof(szModule), section, offset);
+
+			ModuleInfo* moduleInfo = NULL;
+			if (moduleInfoMap.TryAdd(szModule, NULL, &moduleInfo))
+			{
+
+			}
+
 			aDebugDump += StrFormat("%@ %@ %04X:%@ %s\r\n", sf.AddrFrame.Offset, sf.AddrPC.Offset, section, offset, GetFileName(szModule).c_str());
 		}		
 

+ 1 - 1
IDE/BeefProj.toml

@@ -53,7 +53,7 @@ TargetDirectory = "$(WorkspaceDir)/dist"
 TargetName = "BeefIDE_d2"
 OtherLinkFlags = "$(LinkFlags) Comdlg32.lib kernel32.lib user32.lib advapi32.lib shell32.lib IDEHelper64_d.lib BeefySysLib64_d.lib wsock32.lib"
 BeefLibType = "DynamicDebug"
-DebugCommandArguments = "-workspace=c:\\beef_website\\samples\\SpaceGame"
+DebugCommandArguments = "-workspace=c:\\beef\\ide\\mintest"
 DebugWorkingDirectory = "$(ProjectDir)\\dist"
 EnvironmentVars = ["_NO_DEBUG_HEAP=1"]
 

+ 1 - 1
IDE/mintest/BeefProj.toml

@@ -66,4 +66,4 @@ Path = "../../../temp/test.txt"
 [[ProjectFolder.Items]]
 Type = "Folder"
 Path = "../../../temp/borf"
-Source = ["a.txt"]
+Source = ["a.txt"]

+ 9 - 55
IDE/mintest/src/main.bf

@@ -174,68 +174,22 @@ namespace Hey.Dude.Bro
 			return 111;
 		}
 
-		public static int Main(String[] args)
+		public static void TestA()
 		{
-			int* iPtr = null;
-			*iPtr = 123;
+			int* a = null;
+			*a = 123;
+		}
 
+		public static int Main(String[] args)
+		{
 			Blurg.Hey();
 
-			/*while (true)
+			for (int i < 100)
 			{
-				int a = 0;
+				PrintF("Hello 2!\n");
+				Thread.Sleep(10);
 			}
-
-			int* iPtr = null;
-			*iPtr = 123;*/
-
-			GC.SetAutoCollectPeriod(20);
-			Thread.Sleep(1000);
-
-			String str = scope .("Boops!");
-			int len = str.GetLength();
-
-			GetVal();
-
-			Thread thread = scope .(new => Thread);
-			thread.Start(false);
-
-			//Thread.Sleep(500);
-
-			//Test2(1, 2, 3, 4);
-
-			thread.Join();
-
-			RunLong();
 			
-
-			str.Append("Hey yo!\nHey what's up\nHeef neef.\nSnoggles!");
-
-			str.Append(
-				"""
-				Hey, this is a bad ass string
-					Yep yep
-					What up!
-				""");
-
-			Color clr = (.)123;
-
-			int64 l;
-
-			Florf fl = .();
-
-			for (int j < 100)//zzz
-			{
-				fl.Goof();
-
-				for (int i < 1000000000L)
-				{
-					int a = 3;
-				}
-			}
-
-			//PrintF("%ld\n", foo((int32*)&l, &l));
-			//return foo((int32*)&l, &l);
 			return 1;
 		}
 	}

+ 29 - 11
IDE/src/IDEApp.bf

@@ -2509,6 +2509,15 @@ namespace IDE
         {
 			scope AutoBeefPerf("IDE.WorkspaceLoaded");
 
+			if (!Environment.IsFileSystemCaseSensitive)
+			{
+				// Make sure we have the correct actual path
+				String newPath = new String();
+				Path.GetActualPathName(mWorkspace.mDir, newPath);
+				delete mWorkspace.mDir;
+				mWorkspace.mDir = newPath;
+			}
+
 			List<String> platforms = scope List<String>();
 			platforms.Add(IDEApp.sPlatform32Name);
 			platforms.Add(IDEApp.sPlatform64Name);
@@ -6052,6 +6061,7 @@ namespace IDE
 
 			SourceHash hash = default;
 			int hashPos = filePath.IndexOf('#');
+			bool checkForOldFileInfo = false;
 			if (hashPos != -1)
 			{
 				let hashStr = StringView(filePath, hashPos + 1);
@@ -6083,20 +6093,28 @@ namespace IDE
 					if (hashKind == .None)
 						hashKind = .MD5;
 
-					LoadTextFile(filePath, fileText, false, scope [&] () => { hash = SourceHash.Create(hashKind, fileText); }).IgnoreError();
+					LoadTextFile(filePath, fileText, false, scope [&] () => { fileHash = SourceHash.Create(hashKind, fileText); }).IgnoreError();
 
 					if (fileHash != hash)
-					{
-						String outFileInfo = scope String();
-						mDebugger.GetStackFrameOldFileInfo(mDebugger.mActiveCallStackIdx, outFileInfo);
+						checkForOldFileInfo = true;
+				}
+			}
+			else
+			{
+				if (!File.Exists(filePath))
+					checkForOldFileInfo = true;
+			}
 
-						var args = outFileInfo.Split!('\n');
-						if (args.Count == 3)
-						{
-							filePath.Set(args[0]);
-							loadCmd = scope:: String(args[1]);
-						}
-					}
+			if (checkForOldFileInfo)
+			{
+				String outFileInfo = scope String();
+				mDebugger.GetStackFrameOldFileInfo(mDebugger.mActiveCallStackIdx, outFileInfo);
+
+				var args = outFileInfo.Split!('\n');
+				if (args.Count == 3)
+				{
+					filePath.Set(args[0]);
+					loadCmd = scope:: String(args[1]);
 				}
 			}
 

+ 13 - 2
IDE/src/Project.bf

@@ -1291,8 +1291,19 @@ namespace IDE
 			if (!mProjectPath.IsEmpty)
 			{
 				mProjectDir.Clear();
-				mProjectPath.Set(path);
-				IDEUtils.FixFilePath(mProjectPath);
+				mProjectPath.Clear();
+
+				if (!Environment.IsFileSystemCaseSensitive)
+				{
+					Path.GetActualPathName(path, mProjectPath);
+				}
+
+				if (mProjectPath.IsEmpty)
+				{
+					mProjectPath.Set(path);
+					IDEUtils.FixFilePath(mProjectPath);
+				}
+
 				Path.GetDirectoryPath(mProjectPath, mProjectDir);
 	            if (structuredData.Load(ProjectFileName) case .Err)
 	                return false;

+ 37 - 10
IDE/src/ui/SourceViewPanel.bf

@@ -17,6 +17,7 @@ using IDE.Debugger;
 using IDE.Compiler;
 using System.Security.Cryptography;
 using IDE.util;
+using Beefy2D.utils;
 
 namespace IDE.ui
 {
@@ -94,10 +95,6 @@ namespace IDE.ui
 			{
 				if (tabbedView.mIsFillWidget)
 					gApp.mActiveDocumentsTabbedView = tabbedView;
-				else
-				{
-					NOP!();
-				}
 			}
 
 			var sourceEditWidgetContent = (SourceEditWidgetContent)mEditWidgetContent;
@@ -365,6 +362,7 @@ namespace IDE.ui
         public int32 mClassifiedTextVersionId;
 		public bool mLoadFailed;
 		String mOldVerLoadCmd ~ delete _;
+		HTTPRequest mOldVerHTTPRequest ~ delete _;
 		IDEApp.ExecutionInstance mOldVerLoadExecutionInstance ~ { if (_ != null) _.mAutoDelete = true; };
 		SourceFindTask mSourceFindTask ~ delete _;
 		bool mWantsFastClassify;
@@ -3141,14 +3139,20 @@ namespace IDE.ui
 			bool isRepeat = mOldVerLoadCmd != null;
 
 			CloseHeader();
-
-			mPanelHeader = new PanelHeader();
+			
 			if (mOldVerLoadCmd == null)
 				mOldVerLoadCmd = new String(loadCmd);
 
+			if (loadCmd.StartsWith("http", .OrdinalIgnoreCase))
+			{
+				LoadOldVer();
+				return;
+			}
 			// For testing a long command...
 			//mOldVerLoadCmd.Set("/bin/sleep.exe 10");
 
+			mPanelHeader = new PanelHeader();
+
 			String fileName = scope String();
 			Path.GetFileName(mFilePath, fileName);
 			String headerStr = scope String();
@@ -3191,9 +3195,18 @@ namespace IDE.ui
 
 		void LoadOldVer()
 		{
-			Debug.Assert(mOldVerLoadExecutionInstance == null);
-			mOldVerLoadExecutionInstance = gApp.DoRun(null, mOldVerLoadCmd, gApp.mInstallDir, .None);
-			mOldVerLoadExecutionInstance.mAutoDelete = false;
+			if (mOldVerLoadCmd.StartsWith("http", .OrdinalIgnoreCase))
+			{
+				DeleteAndNullify!(mOldVerHTTPRequest);
+				mOldVerHTTPRequest = new HTTPRequest();
+				mOldVerHTTPRequest.GetFile(mOldVerLoadCmd, mFilePath);
+			}
+			else
+			{
+				Debug.Assert(mOldVerLoadExecutionInstance == null);
+				mOldVerLoadExecutionInstance = gApp.DoRun(null, mOldVerLoadCmd, gApp.mInstallDir, .None);
+				mOldVerLoadExecutionInstance.mAutoDelete = false;
+			}
 
 			CloseHeader();
 
@@ -3208,7 +3221,12 @@ namespace IDE.ui
 			var button = mPanelHeader.AddButton("Cancel");
 			button.mOnMouseClick.Add(new (evt) =>
 				{
-					mOldVerLoadExecutionInstance.Cancel();
+					if (mOldVerLoadExecutionInstance != null)
+						mOldVerLoadExecutionInstance.Cancel();
+					if (mOldVerHTTPRequest != null)
+					{
+						DeleteAndNullify!(mOldVerHTTPRequest);
+					}
 				});
 			button = mPanelHeader.AddButton("Always Run");
 			button.mOnMouseClick.Add(new (evt) =>
@@ -5376,6 +5394,15 @@ namespace IDE.ui
 				}
 			}
 
+			if (mOldVerHTTPRequest != null)
+			{
+				let result = mOldVerHTTPRequest.GetResult();
+				if (result != .NotDone)
+				{
+					RetryLoad();
+				}
+			}
+
             UpdateMouseover();            
             
             var compiler = ResolveCompiler;

+ 37 - 6
IDEHelper/COFF.cpp

@@ -8,6 +8,7 @@
 #include "BeefySysLib/Util/PerfTimer.h"
 #include "BeefySysLib/Util/Dictionary.h"
 #include "BeefySysLib/Util/BeefPerf.h"
+#include "BeefySysLib/platform/PlatformHelper.h"
 #include "WinDebugger.h"
 #include "MiniDumpDebugger.h"
 #include "Linker/BlHash.h"
@@ -6327,14 +6328,44 @@ String COFF::GetOldSourceCommand(const StringImpl& path)
 					if (!matches)
 						break;
 
+					String& target = defs["SRCSRVTRG"];
+					String& cmd = defs["SRCSRVCMD"];
+					String& env = defs["SRCSRVENV"];
+
+					_Expand(target);
+					_Expand(cmd);
+					_Expand(env);
+					
 					String retVal;
-					retVal = defs["SRCSRVTRG"];
-					retVal += "\n";
-					retVal += defs["SRCSRVCMD"];
-					retVal += "\n";
-					retVal += defs["SRCSRVENV"];
-					_Expand(retVal);
+					if ((cmd.IsEmpty()) && (target.StartsWith("HTTP", StringImpl::CompareKind_OrdinalIgnoreCase)))
+					{
+						String localFile;
+
+						BfpFileResult result;
+						BFP_GETSTR_HELPER(localFile, result, BfpFile_GetTempPath(__STR, __STRLEN, &result));
+						int dotPos = target.IndexOf("://");
+						if (dotPos != -1)
+						{
+							localFile.Append("SymbolCache\\src\\");
+							localFile.Append(StringView(target, dotPos + 3));
+							localFile.Replace("/", "\\");
+						}						
 
+						retVal = localFile;
+						retVal += "\n";
+						retVal += target;
+						retVal += "\n";
+						retVal += env;
+					}
+					else if (!cmd.IsWhitespace())
+					{
+						retVal = target;
+						retVal += "\n";
+						retVal += cmd;
+						retVal += "\n";
+						retVal += env;
+					}
+					
 					return retVal;
 				}
 				break;

+ 6 - 92
IDEHelper/Profiler.cpp

@@ -1,10 +1,6 @@
 #include "Profiler.h"
 #include "DebugManager.h"
-//#include <Winternl.h>
-//::NtQuerySystemInformation();
 #include <mmsystem.h>
-
-//#include <ntstatus.h>
 #include <ntsecapi.h>   // UNICODE_STRING
 
 #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004
@@ -120,7 +116,7 @@ static SYSTEM_PROCESS_INFORMATION* CaptureProcessInfo()
 	ntdll = GetModuleHandle(path);	
 	if (ntdll == NULL)
 		return NULL;
-	NtQuerySystemInformation = (NtQuerySystemInformation_t) GetProcAddress(ntdll, "NtQuerySystemInformation");	
+	NtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(ntdll, "NtQuerySystemInformation");	
 
 	uint allocSize = 1024;
 	uint8* data = NULL;
@@ -180,9 +176,6 @@ void DbgProfiler::ThreadProc()
 	const int maxStackTrace = 1024;
 	addr_target stackTrace[maxStackTrace];
 
-	// Index zero is invalid
-	//mProfileAddrEntries.push_back(NULL);
-
 	DWORD prevSampleTick = timeGetTime();
 	uint32 accumMS = 0;
 
@@ -201,7 +194,7 @@ void DbgProfiler::ThreadProc()
 			mTotalActualSamples = 0;
 			mTotalActiveSamplingMS = 0;
 
-			mAlloc.Clear();			
+			mAlloc.Clear();
 			mThreadInfo.Clear();
 			mThreadIdList.Clear();
 			mProfileAddrEntrySet.Clear();
@@ -211,7 +204,7 @@ void DbgProfiler::ThreadProc()
 			mProfileProcEntries.Clear();
 			mProfileAddrToProcMap.Clear();
 			mProcMap.Clear();
-			mUniqueProcSet.Clear();			
+			mUniqueProcSet.Clear();
 			mWantsClear = false;
 
 			accumMS = 0;
@@ -221,8 +214,7 @@ void DbgProfiler::ThreadProc()
 		iterations++;
 		DWORD startTick0 = timeGetTime();
 		idleThreadSet.Clear();
-	
-		//SYSTEM_PROCESS_INFORMATION* processData = CaptureProcessInfo();
+		
 		SYSTEM_PROCESS_INFORMATION* processData = NULL;
 		std::unique_ptr<SYSTEM_PROCESS_INFORMATION> ptrDelete(processData);				
 
@@ -585,7 +577,7 @@ void DbgProfiler::HandlePendingEntries()
 			}
 			ProfileProcId* procId = NULL;
 
-			auto subProgram = mDebugger->mDebugTarget->FindSubProgram(addr);
+			auto subProgram = mDebugger->mDebugTarget->FindSubProgram(addr, DbgOnDemandKind_LocalOnly);
 			while (stackTraceProcIdx < maxStackTrace)
 			{
 				if (subProgram != NULL)
@@ -604,7 +596,7 @@ void DbgProfiler::HandlePendingEntries()
 				{
 					String symbolName;
 					addr_target symbolOffset = 0;
-					if ((!mDebugger->mDebugTarget->FindSymbolAt(addr, &symbolName, &symbolOffset)) || (symbolOffset > 64 * 1024))
+					if ((!mDebugger->mDebugTarget->FindSymbolAt(addr, &symbolName, &symbolOffset, NULL, false)) || (symbolOffset > 64 * 1024))
 					{
 						auto dbgModule = mDebugger->mDebugTarget->FindDbgModuleForAddress(addr);
 						if (dbgModule != NULL)
@@ -647,89 +639,11 @@ void DbgProfiler::Process()
 	
 	int time = mTotalActiveSamplingMS;
 
-// 	const int maxStackTrace = 1024;
-// 	ProfileProcId* procStackTrace[maxStackTrace];
-// 	
-// 	bool reverse = false;
-
 	BF_ASSERT(mProfileAddrEntries.IsEmpty());
 	
 	mProfileAddrEntries.Resize(mProfileAddrEntrySet.size() + 1);
 	for (auto& val : mProfileAddrEntrySet)
 		mProfileAddrEntries[val.mEntryIdx] = &val;
-	
-// 	for (int i = 0; i < (int)mProfileAddrEntries.size(); i++)
-// 		mProfileAddrToProcMap.push_back(-1);
-			
-// 	for (int addrEntryIdx = 0; addrEntryIdx < (int)mProfileAddrEntries.size(); addrEntryIdx++)
-// 	{
-// 		const ProfileAddrEntry* addrEntry = mProfileAddrEntries[addrEntryIdx];
-// 		if (addrEntry == NULL)
-// 			continue;
-// 
-// 		ProfileProcId** procStackTraceHead = reverse ? (procStackTrace + maxStackTrace) : procStackTrace;
-// 		int stackTraceProcIdx = 0;
-// 		for (int addrIdx = 0; addrIdx < addrEntry->mSize; addrIdx++)
-// 		{
-// 			addr_target addr = addrEntry->mData[addrIdx];
-// 			if (addrIdx > 0)
-// 			{
-// 				// To reference from SourcePC (calling address, not return address)
-// 				addr--;
-// 			}
-// 			ProfileProcId* procId = NULL;
-// 
-// 			auto subProgram = mDebugger->mDebugTarget->FindSubProgram(addr);
-// 			while (stackTraceProcIdx < maxStackTrace)
-// 			{
-// 				if (subProgram != NULL)
-// 				{
-// 					ProfileProcId** procIdPtr;
-// 					if (mProcMap.TryAdd(subProgram, NULL, &procIdPtr))
-// 					{
-// 						String procName = subProgram->ToString();
-// 						procId = Get(procName);
-// 						*procIdPtr = procId;
-// 					}
-// 					else
-// 						procId = *procIdPtr;
-// 				}
-// 				else
-// 				{
-// 					String symbolName;
-// 					addr_target symbolOffset = 0;
-// 					if ((!mDebugger->mDebugTarget->FindSymbolAt(addr, &symbolName, &symbolOffset)) || (symbolOffset > 64 * 1024))
-// 					{
-// 						auto dbgModule = mDebugger->mDebugTarget->FindDbgModuleForAddress(addr);
-// 						if (dbgModule != NULL)
-// 							symbolName += dbgModule->mDisplayName + "!";						
-// 						symbolName += StrFormat("0x%@", addr);
-// 					}
-// 
-// 					procId = Get(symbolName);
-// 				}
-// 
-// 				if (reverse)
-// 					*(--procStackTraceHead) = procId;
-// 				else
-// 					procStackTraceHead[stackTraceProcIdx] = procId;
-// 				stackTraceProcIdx++;
-// 
-// 				if (subProgram == NULL)
-// 					break;
-// 				if (subProgram->mInlineeInfo == NULL)
-// 					break;
-// 				subProgram = subProgram->mInlineeInfo->mInlineParent;
-// 			}
-// 		}
-// 
-// 		auto procEntry = AddToSet(mProfileProcEntrySet, procStackTraceHead, stackTraceProcIdx);
-// 		if (procEntry->mEntryIdx == -1)
-// 		{					
-// 			procEntry->mEntryIdx = (int)mProfileProcEntrySet.size() - 1; // Start at '0'			
-// 		}
-// 		mProfileAddrToProcMap[addrEntry->mEntryIdx] = procEntry->mEntryIdx;		
-// 	}	
 
 	BF_ASSERT(mProfileProcEntries.IsEmpty());
 	mProfileProcEntries.Resize(mProfileProcEntrySet.size());

+ 23 - 25
IDEHelper/WinDebugger.cpp

@@ -1399,9 +1399,9 @@ bool WinDebugger::DoUpdate()
 			dbgModule->PreCacheImage();
 		}
 
-		for (auto dbgModule : mPendingDebugInfoLoad)
+		for (auto kv : mPendingDebugInfoLoad)
 		{
-			dbgModule->PreCacheDebugInfo();
+			kv.mKey->PreCacheDebugInfo();
 		}
 
 		while (!mPendingImageLoad.IsEmpty())
@@ -1412,26 +1412,21 @@ bool WinDebugger::DoUpdate()
 			_ModuleChanged(dbgModule);
 		}
 
-		while (!mPendingDebugInfoLoad.IsEmpty())
+		if (!mPendingDebugInfoLoad.IsEmpty())
 		{
-			auto dbgModule = mPendingDebugInfoLoad.back();
-			mPendingDebugInfoLoad.pop_back();
-			dbgModule->RequestDebugInfo();
-			// We do a "_ModuleChanged" even if the load failed, so we rehup the callstack and stop
-			//  saying "<Loading...>"
-			_ModuleChanged(dbgModule);
-		}
-
-		/*while (!mPendingDebugInfoRequests.IsEmpty())
-		{
-			if ((!mPendingImageLoad.IsEmpty()) || (!mPendingDebugInfoLoad.IsEmpty()))
-				break;
-
-			auto dbgModule = mPendingDebugInfoRequests.back();
-			mPendingDebugInfoRequests.pop_back();
-			if (LoadDebugInfoForModule(dbgModule) == 1)
-				_ModuleChanged(dbgModule);
-		}*/
+			Array<DbgPendingDebugInfoLoad> pendingList;
+			for (auto kv : mPendingDebugInfoLoad)
+				pendingList.Add(kv.mValue);
+			
+			for (auto& entry : pendingList)
+			{
+				auto dbgModule = entry.mModule;
+				entry.mModule->RequestDebugInfo(entry.mAllowRemote);
+				// We do a "_ModuleChanged" even if the load failed, so we rehup the callstack and stop
+				//  saying "<Loading...>"
+				_ModuleChanged(entry.mModule);
+			}
+		}		
 	}
 
 	if (IsMiniDumpDebugger())
@@ -10829,7 +10824,7 @@ String WinDebugger::GetStackFrameInfo(int stackFrameIdx, intptr* addr, String* o
 			{
 				*outFlags |= FrameFlags_HasPendingDebugInfo;
 				
-				if (mPendingDebugInfoLoad.Contains(dbgModule))
+				if (mPendingDebugInfoLoad.ContainsKey(dbgModule))
 				{
 					String outName = EncodeDataPtr(pcAddress, true);
 					if ((dbgModule != NULL) && (!dbgModule->mDisplayName.empty()))
@@ -11957,12 +11952,15 @@ int WinDebugger::LoadDebugInfoForModule(DbgModule* dbgModule)
 		return 1;
 	}
 
-	if (!mPendingDebugInfoLoad.Contains(dbgModule))
+	DbgPendingDebugInfoLoad* dbgPendingDebugInfoLoad = NULL;
+	if (mPendingDebugInfoLoad.TryAdd(dbgModule, NULL, &dbgPendingDebugInfoLoad))
 	{
-		mPendingDebugInfoLoad.Add(dbgModule);
+		dbgPendingDebugInfoLoad->mModule = dbgModule;
+		dbgPendingDebugInfoLoad->mAllowRemote = true;
 		return 2;
 	}
-
+	dbgPendingDebugInfoLoad->mAllowRemote = true;
+	
 	return 0;
 }
 

+ 13 - 1
IDEHelper/WinDebugger.h

@@ -357,6 +357,18 @@ struct WdMemoryBreakpointBind
 	}
 };
 
+struct DbgPendingDebugInfoLoad
+{
+	DbgModule* mModule;
+	bool mAllowRemote;
+
+	DbgPendingDebugInfoLoad()
+	{
+		mModule = NULL;
+		mAllowRemote = false;
+	}
+};
+
 class WinDebugger : public Debugger
 {
 public:	
@@ -431,7 +443,7 @@ public:
 	DbgPendingExpr* mDebugPendingExpr;
 	WdThreadInfo mDebugEvalThreadInfo; // Copy of thread info when eval started
 	Array<DbgModule*> mPendingImageLoad;
-	Array<DbgModule*> mPendingDebugInfoLoad;
+	Dictionary<DbgModule*, DbgPendingDebugInfoLoad> mPendingDebugInfoLoad;
 	Array<DbgModule*> mPendingDebugInfoRequests;
 	HashSet<String> mLiteralSet;
 

BIN
bin/Beefy.vsmacros


+ 0 - 47
bin/BeefyDepsMerge.py

@@ -1,47 +0,0 @@
-# Sublime Text 3 macro to merge CodeConv deps files
-#  Open deps files and run this macro.  A new file will be created that
-#  includes data from all open deps files.
-import sublime, sublime_plugin  
-  
-class Beefy_deps_mergeCommand(sublime_plugin.TextCommand):  
-    def run(self, edit):
-        nv = self.view.window().new_file()
-
-        typeMap = {};
-        strOut = "{\n\t\"trimReflection\":true,\n\t\"requiredTypes\":\n\t[\n"
-
-        for view in self.view.window().views():         
-            fileName = view.file_name()         
-            if ((fileName == None) or (fileName.find(".bfrtproj") == -1)):
-                continue        
-
-            viewRegion = sublime.Region(0, view.size())
-            fullText = view.substr(viewRegion)
-            lines = fullText.splitlines()
-            
-            for line in lines:
-                if not line.startswith("\t\t\""):
-                    continue
-
-                dataStr = line.split('\"')[1]
-                parts = dataStr.split(':')
-
-                typeName = parts[0]
-                memberData = parts[1].split(';')
-
-                if not typeName in typeMap:                    
-                    typeMap[typeName] = []
-
-                for memberName in memberData:
-                    if (not memberName in typeMap[typeName]):
-                        typeMap[typeName].append(memberName)                        
-
-        for typeName in sorted(typeMap):
-            lineOut = "\t\t\"" + typeName + ":"
-            lineOut += ";".join(sorted(typeMap[typeName]))
-            lineOut += "\",\n"
-            strOut += lineOut
-
-        strOut += "\t]\n}\n"
-
-        nv.replace(edit, sublime.Region(nv.size(), nv.size()), strOut)            

+ 0 - 67
bin/BeefyLLDB.py

@@ -1,67 +0,0 @@
-""" File: BeefyLLDB.py """
-import lldb
-import shlex
-
-class BFArraySyntheticChildrenProvider:
-	def __init__(self, valobj, internal_dict):
-		#print "Var: " + valobj.GetName()
-		self.startIdx = 1
-		self.obj = valobj
-		self.update()
-	def update(self):
-		self.length = self.obj.GetChildMemberWithName("mLength")
-		self.firstElement = self.obj.GetChildMemberWithName("mFirstElement")
-		self.dataType = self.firstElement.GetType()
-	def num_children(self): 
-		return min(1024, self.length.GetValueAsSigned()) + self.startIdx;
-	def get_child_index(self,name): 
-		if (name == "mLength"):
-			return 0;
-		try:
-			return int(name.lstrip('[').rstrip(']')) + self.startIdx
-		except:
-			return -1
-	def get_child_at_index(self,index): 
-		if index < 0:
-			return None;
-		if index >= self.num_children():
-			return None;
-		
-		if (index == 0):
-			return self.length;
-
-		offset = (index - self.startIdx) * self.dataType.GetByteSize()
-		return self.firstElement.AddressOf().CreateChildAtOffset('['+str(index - self.startIdx)+']', offset, self.dataType)
-
-	def has_children(self): 
-		return True
-
-def StringSummaryProvider(valobj, dict):
-	e = lldb.SBError()
-	s = u'"'
-	
-	if valobj.GetValue() != 0:
-		strObj = valobj.GetChildMemberWithName("start_char")
-		len = valobj.GetChildMemberWithName("length").GetValueAsSigned()
-		
-		i = 0
-		newchar = -1
-		ptrType = strObj.GetType().GetPointerType()
-
-		for i in range(0, min(8192, len)):
-			data_val = strObj.CreateChildAtOffset('['+str(i)+']', i*2, strObj.GetType())
-			newchar = data_val.GetValueAsUnsigned()
-			i = i + 1
-			
-			if newchar != 0:
-				s = s + unichr(newchar)
-		s = s + u'"'
-	return s.encode('utf-8')
-
-def __lldb_init_module(debugger,dict):
-	print "InitModule"
-	debugger.HandleCommand('type summary add --expand -x "BFArray1<" -summary-string "len = ${var.mLength}"')
-	debugger.HandleCommand('type synthetic add -x "BFArray1<" -l BeefyLLDB.BFArraySyntheticChildrenProvider')
-	debugger.HandleCommand('type summary add "BFType" -summary-string "${var.mDebugTypeData->mName}@${var.mDebugTypeData->mNamespace}"')
-	debugger.HandleCommand('type summary add "BFTypeRoot" -summary-string "${var.mDebugTypeData->mName}@${var.mDebugTypeData->mNamespace}"')
-	debugger.HandleCommand('type summary add "System::String" -F BeefyLLDB.StringSummaryProvider')

+ 0 - 310
bin/machine.config

@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<configuration>
-
-	<configSections>
-		<section name="configProtectedData" type="System.Configuration.ProtectedConfigurationSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-		<section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-		<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-		<section name="mscorlib" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
-		<section name="runtime" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
-		<section name="assemblyBinding"  type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
-		<section name="satelliteassemblies" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
-		<section name="startup" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
-		<section name="system.codedom" type="System.CodeDom.Compiler.CodeDomConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		<section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		<section name="system.diagnostics" type="System.Diagnostics.DiagnosticsConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		<section name="system.runtime.remoting" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
-		<section name="system.windows.forms" type="System.Windows.Forms.WindowsFormsSection, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		<section name="windows" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
-		<section name="strongNames" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
-		<sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-			<section name="anonymousIdentification" type="System.Web.Configuration.AnonymousIdentificationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="authorization" type="System.Web.Configuration.AuthorizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="browserCaps" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="clientTarget" type="System.Web.Configuration.ClientTargetSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="compilation" type="System.Web.Configuration.CompilationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="customErrors" type="System.Web.Configuration.CustomErrorsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="deployment" type="System.Web.Configuration.DeploymentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" />
-			<section name="globalization" type="System.Web.Configuration.GlobalizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="healthMonitoring" type="System.Web.Configuration.HealthMonitoringSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="hostingEnvironment" type="System.Web.Configuration.HostingEnvironmentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
-			<section name="httpCookies" type="System.Web.Configuration.HttpCookiesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="httpHandlers" type="System.Web.Configuration.HttpHandlersSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="httpModules" type="System.Web.Configuration.HttpModulesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="httpRuntime" type="System.Web.Configuration.HttpRuntimeSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="identity" type="System.Web.Configuration.IdentitySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="machineKey" type="System.Web.Configuration.MachineKeySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="membership" type="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="mobileControls" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-                        <section name="deviceFilters" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="pages" type="System.Web.Configuration.PagesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="processModel" type="System.Web.Configuration.ProcessModelSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" allowLocation="false" />
-			<section name="profile" type="System.Web.Configuration.ProfileSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="roleManager" type="System.Web.Configuration.RoleManagerSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="securityPolicy" type="System.Web.Configuration.SecurityPolicySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
-			<section name="sessionPageState" type="System.Web.Configuration.SessionPageStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="sessionState" type="System.Web.Configuration.SessionStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="siteMap" type="System.Web.Configuration.SiteMapSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="trace" type="System.Web.Configuration.TraceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="trust" type="System.Web.Configuration.TrustSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
-			<section name="urlMappings" type="System.Web.Configuration.UrlMappingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			<section name="webControls" type="System.Web.Configuration.WebControlsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="webParts" type="System.Web.Configuration.WebPartsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="webServices" type="System.Web.Services.Configuration.WebServicesSection, System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<section name="xhtmlConformance" type="System.Web.Configuration.XhtmlConformanceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-			<sectionGroup name="caching" type="System.Web.Configuration.SystemWebCachingSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-				<section name="cache" type="System.Web.Configuration.CacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-				<section name="outputCache" type="System.Web.Configuration.OutputCacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-				<section name="outputCacheSettings" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-				<section name="sqlCacheDependency" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-			</sectionGroup>
-			<section name="monoSettings" type="System.Web.Configuration.MonoSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-		</sectionGroup>
-		<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
-			<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
-				<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
-				<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
-					<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
-					<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
-					<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
-					<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
-				</sectionGroup>
-			</sectionGroup>
-		</sectionGroup>
-		<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-			<section name="authenticationModules" type="System.Net.Configuration.AuthenticationModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="connectionManagement" type="System.Net.Configuration.ConnectionManagementSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-				<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			</sectionGroup>
-			<section name="requestCaching" type="System.Net.Configuration.RequestCachingSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="settings" type="System.Net.Configuration.SettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="webRequestModules" type="System.Net.Configuration.WebRequestModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		</sectionGroup>
-		<section name="system.drawing" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		<sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-			<section name="behaviors" type="System.ServiceModel.Configuration.BehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="bindings" type="System.ServiceModel.Configuration.BindingsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="client" type="System.ServiceModel.Configuration.ClientSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="commonBehaviors" type="System.ServiceModel.Configuration.CommonBehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="diagnostics" type="System.ServiceModel.Configuration.DiagnosticSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
-			<section name="routing" type="System.ServiceModel.Routing.Configuration.RoutingSection, System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-			<section name="protocolMapping" type="System.ServiceModel.Configuration.ProtocolMappingSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
-		</sectionGroup>
-		<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
-			<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
-			<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
-		</sectionGroup>
-		<section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-		<section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		<sectionGroup name="system.runtime.caching" type="System.Runtime.Caching.Configuration.CachingSectionGroup, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-		  <section name="memoryCache" type="System.Runtime.Caching.Configuration.MemoryCacheSection, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
-                </sectionGroup>
-	</configSections>
-
-	<connectionStrings>
-		<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
-		<add name="LocalSqliteServer" connectionString="Data Source=|DataDirectory|/aspnetdb.sqlite;version=3" providerName="Mono.Data.Sqlite"/>
-	</connectionStrings>
-	
-	<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
-		<providers>
-			<add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
-                             description="" keyContainerName="MonoFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
-			<add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
-                             description="" useMachineProtection="true" keyEntropy="" />
-		</providers>
-	</configProtectedData>
-
-	<system.net>
-		<authenticationModules>
-			<add type="System.Net.BasicClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<add type="System.Net.DigestClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<add type="System.Net.NtlmClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		</authenticationModules>
-		<webRequestModules>
-			<add prefix="http" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<add prefix="https" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<add prefix="file" type="System.Net.FileWebRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<add prefix="ftp" type="System.Net.FtpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		</webRequestModules>
-		<settings>
-			<ipv6 enabled="false"/>
-		</settings>
-	</system.net>
-	
-	<system.runtime.remoting>
-		<application>
-			<channels>
-				<channel ref="http client" displayName="http client (delay loaded)" delayLoadAsClientChannel="true" />
-				<channel ref="tcp client" displayName="tcp client (delay loaded)" delayLoadAsClientChannel="true" />
-				<channel ref="ipc client" displayName="ipc client (delay loaded)" delayLoadAsClientChannel="true" />
-			</channels>
-		</application>
-		<channels>
-			<channel id="http" type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="http client" type="System.Runtime.Remoting.Channels.Http.HttpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="http server" type="System.Runtime.Remoting.Channels.Http.HttpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="tcp" type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="tcp client" type="System.Runtime.Remoting.Channels.Tcp.TcpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="tcp server" type="System.Runtime.Remoting.Channels.Tcp.TcpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="ipc" type="System.Runtime.Remoting.Channels.Ipc.IpcChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="ipc client" type="System.Runtime.Remoting.Channels.Ipc.IpcClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-			<channel id="ipc server" type="System.Runtime.Remoting.Channels.Ipc.IpcServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-		</channels>
-			<channelSinkProviders>
-				<clientProviders>
-					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-				</clientProviders>
-				<serverProviders>
-					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-					<provider id="wsdl" type="System.Runtime.Remoting.MetadataServices.SdlChannelSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-				</serverProviders>
-			</channelSinkProviders>
-	</system.runtime.remoting>
-	
-	<appSettings>
-	<!--<add key="yourkey" value="your value" /> -->
-	<!--<remove key="a key defined higher in the hierarchy" /> -->
-	<!--<clear/> Removes all defined settings -->
-	</appSettings>
-	<system.diagnostics>
-		<trace autoflush="false" indentsize="4" />
-	</system.diagnostics>
-        <system.drawing>
-        </system.drawing>
-
-	<system.data>
-	  <DbProviderFactories>
-	    <add name="Mono Sqlite Data Provider"  invariant="Mono.Data.SqliteClient" 
-		 description="Mono Framework Data Provider for SQLite (old version)" 
-		 type="Mono.Data.SqliteClient.SqliteFactory, Mono.Data.SqliteClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
-	    <add name="Mono Sqlite Provider"  invariant="Mono.Data.Sqlite" 
-		 description="Mono Framework Data Provider for SQLite (new version)"
-		 type="Mono.Data.Sqlite.SqliteFactory, Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
-	    <add name="Odbc Data Provider"         invariant="System.Data.Odbc"         
-		 description=".Net Framework Data Provider for Odbc"      
-		 type="System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
-            <add name="OleDb Data Provider"        invariant="System.Data.OleDb"        
-		 description=".Net Framework Data Provider for OleDb"     
-		 type="System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
-            <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" 
-		 description=".Net Framework Data Provider for Oracle"    
-		 type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
-            <add name="SqlClient Data Provider"    invariant="System.Data.SqlClient"    
-		 description=".Net Framework Data Provider for SqlServer" 
-		 type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
-            <add name="Sybase Data Provider"    invariant="Mono.Data.SybaseClient"    
-		 description=".Net Framework Data Provider for Sybase" 
-		 type="Mono.Data.SybaseClient.SybaseClientFactory, Mono.Data.SybaseClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
-	  </DbProviderFactories>
-	</system.data>
-
-	<mscorlib>
-		<cryptographySettings>
-			<cryptoNameMapping>
-				<cryptoClasses>
-					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
-					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
-				</cryptoClasses>
-				<nameEntry name="MD2" class="monoMD2" />
-				<nameEntry name="MD4" class="monoMD4" />
-			</cryptoNameMapping>
-			<oidMap>
-				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
-				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
-				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
-				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
-			</oidMap>
-		</cryptographySettings>
-	</mscorlib>
-
-	<strongNames>
-		<pubTokenMapping>
-			<!-- ECMA key -->
-			<map Token="b77a5c561934e089" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
-			<!-- Microsoft (final) key -->
-			<map Token="b03f5f7f11d50a3a" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
-			<!-- Microsoft (Web Service Enhancement) key -->
-			<map Token="31bf3856ad364e35" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
-			<!-- IBM (DB2 Data Provider) key -->
-			<map Token="7c307b91aa13d208" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
-			<!-- Silverlight 2.0 key -->
-			<map Token="7cec85d7bea7798e" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
-			<!-- XNA Framework key -->                                                            
-			<map Token="6d5c3888ef60e27d" PublicKey="0024000004800000940000000602000000240000525341310004000001000100f9a2641bac9847900d92a33d652ccc4e8b529360f908e7af53e57008b2a9a1938c32a160d47f795a23590557608d2c8d0c0e8846a052d070f9298281b8185343dbe5b479bd52de256f73c2a943e1a8a42065b5c918622dc14b1c0151dbd94d9a4543e7cd03e536b1b1d2d6d99af535d227ab9bdac76af9312a21d457bdf817e6" />
-		</pubTokenMapping>
-	</strongNames>
-
-	<system.web>
-		<webServices>
-			<protocols>
-				<add name="HttpSoap"/>
-				<add name="HttpSoap12"/>
-				<add name="HttpPost"/>
-				<add name="HttpGet"/>
-				<add name="Documentation"/>
-			</protocols>
-			<conformanceWarnings>
-				<add name="BasicProfile1_1"/>
-			</conformanceWarnings>
-			<wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx" />
-		</webServices>
-
-		<membership>
-			<providers>
-				<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
-				<!-- <add name="AspNetSqlMembershipProvider" type="Mainsoft.Web.Security.GenericMembershipProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
-			</providers>
-		</membership>
-
-		<roleManager>
-			<providers>
-				<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/" connectionStringName="LocalSqlServer" />
-				<!-- <add name="AspNetSqlRoleProvider" type="Mainsoft.Web.Security.GenericRoleProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
-			</providers>
-		</roleManager>
-
-		<profile>
-        		<providers>
-            		    <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-		        </providers>
-    		</profile>
-	</system.web>
-
-
-	<system.serviceModel>
-		<extensions>
-			<behaviorExtensions>
-				<add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="webHttp" type="System.ServiceModel.Configuration.WebHttpElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-			</behaviorExtensions>
-			<bindingElementExtensions>
-				<add name="webMessageEncoding" type="System.ServiceModel.Configuration.WebMessageEncodingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-			</bindingElementExtensions>
-			<bindingExtensions>
-				<add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-			</bindingExtensions>
-			<endpointExtensions>
-				<add name="dynamicEndpoint" type="System.ServiceModel.Discovery.Configuration.DynamicEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="discoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.DiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="udpDiscoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpDiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="announcementEndpoint" type="System.ServiceModel.Discovery.Configuration.AnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="udpAnnouncementEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpAnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="webHttpEndpoint" type="System.ServiceModel.Configuration.WebHttpEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-				<add name="webScriptEndpoint" type="System.ServiceModel.Configuration.WebScriptEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
-			</endpointExtensions>
-		</extensions>
-	</system.serviceModel>
-</configuration>
-
-

BIN
bin/symstore.exe