1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Debugger fixes

Removing some debugger remote-requests
This commit is contained in:
Brian Fiete 2019-09-20 09:21:29 -07:00
parent c2d086fe8e
commit a32d18d962
21 changed files with 198 additions and 638 deletions

View file

@ -12,6 +12,7 @@
#include "BeefySysLib/util/Deque.h" #include "BeefySysLib/util/Deque.h"
#include "BeefySysLib/util/HashSet.h" #include "BeefySysLib/util/HashSet.h"
#include "BeefySysLib/util/MultiHashSet.h" #include "BeefySysLib/util/MultiHashSet.h"
#include "CrashCatcher.h"
//#include <mmsystem.h> //#include <mmsystem.h>
//#include <shellapi.h> //#include <shellapi.h>

View file

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

View file

@ -548,6 +548,7 @@
<OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile> <OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary> <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
<ModuleDefinitionFile>BeefRT.def</ModuleDefinitionFile> <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> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'">

View file

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

View file

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

View file

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

View file

@ -174,68 +174,22 @@ namespace Hey.Dude.Bro
return 111; return 111;
} }
public static void TestA()
{
int* a = null;
*a = 123;
}
public static int Main(String[] args) public static int Main(String[] args)
{ {
int* iPtr = null;
*iPtr = 123;
Blurg.Hey(); 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; return 1;
} }
} }

View file

@ -2509,6 +2509,15 @@ namespace IDE
{ {
scope AutoBeefPerf("IDE.WorkspaceLoaded"); 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>(); List<String> platforms = scope List<String>();
platforms.Add(IDEApp.sPlatform32Name); platforms.Add(IDEApp.sPlatform32Name);
platforms.Add(IDEApp.sPlatform64Name); platforms.Add(IDEApp.sPlatform64Name);
@ -6052,6 +6061,7 @@ namespace IDE
SourceHash hash = default; SourceHash hash = default;
int hashPos = filePath.IndexOf('#'); int hashPos = filePath.IndexOf('#');
bool checkForOldFileInfo = false;
if (hashPos != -1) if (hashPos != -1)
{ {
let hashStr = StringView(filePath, hashPos + 1); let hashStr = StringView(filePath, hashPos + 1);
@ -6083,20 +6093,28 @@ namespace IDE
if (hashKind == .None) if (hashKind == .None)
hashKind = .MD5; 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) if (fileHash != hash)
{ checkForOldFileInfo = true;
String outFileInfo = scope String(); }
mDebugger.GetStackFrameOldFileInfo(mDebugger.mActiveCallStackIdx, outFileInfo); }
else
{
if (!File.Exists(filePath))
checkForOldFileInfo = true;
}
var args = outFileInfo.Split!('\n'); if (checkForOldFileInfo)
if (args.Count == 3) {
{ String outFileInfo = scope String();
filePath.Set(args[0]); mDebugger.GetStackFrameOldFileInfo(mDebugger.mActiveCallStackIdx, outFileInfo);
loadCmd = scope:: String(args[1]);
} var args = outFileInfo.Split!('\n');
} if (args.Count == 3)
{
filePath.Set(args[0]);
loadCmd = scope:: String(args[1]);
} }
} }

View file

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

View file

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

View file

@ -8,6 +8,7 @@
#include "BeefySysLib/Util/PerfTimer.h" #include "BeefySysLib/Util/PerfTimer.h"
#include "BeefySysLib/Util/Dictionary.h" #include "BeefySysLib/Util/Dictionary.h"
#include "BeefySysLib/Util/BeefPerf.h" #include "BeefySysLib/Util/BeefPerf.h"
#include "BeefySysLib/platform/PlatformHelper.h"
#include "WinDebugger.h" #include "WinDebugger.h"
#include "MiniDumpDebugger.h" #include "MiniDumpDebugger.h"
#include "Linker/BlHash.h" #include "Linker/BlHash.h"
@ -6327,13 +6328,43 @@ String COFF::GetOldSourceCommand(const StringImpl& path)
if (!matches) if (!matches)
break; break;
String& target = defs["SRCSRVTRG"];
String& cmd = defs["SRCSRVCMD"];
String& env = defs["SRCSRVENV"];
_Expand(target);
_Expand(cmd);
_Expand(env);
String retVal; String retVal;
retVal = defs["SRCSRVTRG"]; if ((cmd.IsEmpty()) && (target.StartsWith("HTTP", StringImpl::CompareKind_OrdinalIgnoreCase)))
retVal += "\n"; {
retVal += defs["SRCSRVCMD"]; String localFile;
retVal += "\n";
retVal += defs["SRCSRVENV"]; BfpFileResult result;
_Expand(retVal); 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; return retVal;
} }

View file

@ -1,10 +1,6 @@
#include "Profiler.h" #include "Profiler.h"
#include "DebugManager.h" #include "DebugManager.h"
//#include <Winternl.h>
//::NtQuerySystemInformation();
#include <mmsystem.h> #include <mmsystem.h>
//#include <ntstatus.h>
#include <ntsecapi.h> // UNICODE_STRING #include <ntsecapi.h> // UNICODE_STRING
#define STATUS_INFO_LENGTH_MISMATCH 0xc0000004 #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004
@ -120,7 +116,7 @@ static SYSTEM_PROCESS_INFORMATION* CaptureProcessInfo()
ntdll = GetModuleHandle(path); ntdll = GetModuleHandle(path);
if (ntdll == NULL) if (ntdll == NULL)
return NULL; return NULL;
NtQuerySystemInformation = (NtQuerySystemInformation_t) GetProcAddress(ntdll, "NtQuerySystemInformation"); NtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(ntdll, "NtQuerySystemInformation");
uint allocSize = 1024; uint allocSize = 1024;
uint8* data = NULL; uint8* data = NULL;
@ -180,9 +176,6 @@ void DbgProfiler::ThreadProc()
const int maxStackTrace = 1024; const int maxStackTrace = 1024;
addr_target stackTrace[maxStackTrace]; addr_target stackTrace[maxStackTrace];
// Index zero is invalid
//mProfileAddrEntries.push_back(NULL);
DWORD prevSampleTick = timeGetTime(); DWORD prevSampleTick = timeGetTime();
uint32 accumMS = 0; uint32 accumMS = 0;
@ -222,7 +215,6 @@ void DbgProfiler::ThreadProc()
DWORD startTick0 = timeGetTime(); DWORD startTick0 = timeGetTime();
idleThreadSet.Clear(); idleThreadSet.Clear();
//SYSTEM_PROCESS_INFORMATION* processData = CaptureProcessInfo();
SYSTEM_PROCESS_INFORMATION* processData = NULL; SYSTEM_PROCESS_INFORMATION* processData = NULL;
std::unique_ptr<SYSTEM_PROCESS_INFORMATION> ptrDelete(processData); std::unique_ptr<SYSTEM_PROCESS_INFORMATION> ptrDelete(processData);
@ -585,7 +577,7 @@ void DbgProfiler::HandlePendingEntries()
} }
ProfileProcId* procId = NULL; ProfileProcId* procId = NULL;
auto subProgram = mDebugger->mDebugTarget->FindSubProgram(addr); auto subProgram = mDebugger->mDebugTarget->FindSubProgram(addr, DbgOnDemandKind_LocalOnly);
while (stackTraceProcIdx < maxStackTrace) while (stackTraceProcIdx < maxStackTrace)
{ {
if (subProgram != NULL) if (subProgram != NULL)
@ -604,7 +596,7 @@ void DbgProfiler::HandlePendingEntries()
{ {
String symbolName; String symbolName;
addr_target symbolOffset = 0; 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); auto dbgModule = mDebugger->mDebugTarget->FindDbgModuleForAddress(addr);
if (dbgModule != NULL) if (dbgModule != NULL)
@ -647,90 +639,12 @@ void DbgProfiler::Process()
int time = mTotalActiveSamplingMS; int time = mTotalActiveSamplingMS;
// const int maxStackTrace = 1024;
// ProfileProcId* procStackTrace[maxStackTrace];
//
// bool reverse = false;
BF_ASSERT(mProfileAddrEntries.IsEmpty()); BF_ASSERT(mProfileAddrEntries.IsEmpty());
mProfileAddrEntries.Resize(mProfileAddrEntrySet.size() + 1); mProfileAddrEntries.Resize(mProfileAddrEntrySet.size() + 1);
for (auto& val : mProfileAddrEntrySet) for (auto& val : mProfileAddrEntrySet)
mProfileAddrEntries[val.mEntryIdx] = &val; 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()); BF_ASSERT(mProfileProcEntries.IsEmpty());
mProfileProcEntries.Resize(mProfileProcEntrySet.size()); mProfileProcEntries.Resize(mProfileProcEntrySet.size());
for (auto& val : mProfileProcEntrySet) for (auto& val : mProfileProcEntrySet)

View file

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

View file

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

Binary file not shown.

View file

@ -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)

View file

@ -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')

View file

@ -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>

Binary file not shown.