PTVS的内存分配失败及处理


快乐虾

http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)

欢迎转载,但请保留作者信息


PTVS是微软的一个VS插件,用以支持VS下的PYTHON编辑与调试,PTVS在运行时需要依赖于Analyzer生成的数据库,但当python的库文件较多时会出现内存分配失败的异常,类似这样的:

System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。
   在 System.Linq.Enumerable.OfTypeIterator[TResult](IEnumerable source)
   在 System.Linq.Enumerable.OfType[TResult](IEnumerable source)
   在 Microsoft.PythonTools.Analysis.Analyzer.DDG.Walk(AssignmentStatement node) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\Analyzer\DDG.cs:行号 151
   在 Microsoft.PythonTools.Parsing.Ast.AssignmentStatement.Walk(PythonWalker walker) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\Parsing\Ast\AssignmentStatement.cs:行号 39
   在 Microsoft.PythonTools.Analysis.Analyzer.DDG.Walk(SuiteStatement node) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\Analyzer\DDG.cs:行号 508
   在 Microsoft.PythonTools.Parsing.Ast.SuiteStatement.Walk(PythonWalker walker) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\Parsing\Ast\SuiteStatement.cs:行号 32
   在 Microsoft.PythonTools.Analysis.Analyzer.FunctionAnalysisUnit.AnalyzeWorker(DDG ddg, CancellationToken cancel) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\Analyzer\FunctionAnalysisUnit.cs:行号 107
   在 Microsoft.PythonTools.Analysis.AnalysisUnit.Analyze(DDG ddg, CancellationToken cancel) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\AnalysisUnit.cs:行号 142
   在 Microsoft.PythonTools.Analysis.Analyzer.DDG.Analyze(Deque`1 queue, CancellationToken cancel, Action`1 reportQueueSize, Int32 reportQueueInterval) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\Analyzer\DDG.cs:行号 73
   在 Microsoft.PythonTools.Analysis.PythonAnalyzer.AnalyzeQueuedEntries(CancellationToken cancel) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analysis\PythonAnalyzer.cs:行号 837
   在 Microsoft.PythonTools.Analysis.PyLibAnalyzer.Analyze() 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analyzer\PyLibAnalyzer.cs:行号 1181
   在 Microsoft.PythonTools.Analysis.PyLibAnalyzer.Main(String[] args) 位置 f:\projects\src\gdb2012\src\ptvs-2.1\Python\Product\Analyzer\PyLibAnalyzer.cs:行号 166 "C:\USERS\LIGHTS\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\12.0EXP\EXTENSIONS\MICROSOFT\PYTHON TOOLS FOR VISUAL STUDIO\2.1\Microsoft.PythonTools.Analyzer.exe" /id {0180036d-fea9-4b98-950d-1253b922ddcc} /version 2.7 /python F:\projects\bin\Win32\Debug\python-2.7.6.exe /library F:\projects\bin\Win32\Debug\Lib\python-2.7 /outdir "C:\Users\lights\AppData\Local\Python Tools\CompletionDB\Debug\12.0\0180036d-fea9-4b98-950d-1253b922ddcc\2.7" /basedb "C:\USERS\LIGHTS\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\12.0EXP\EXTENSIONS\MICROSOFT\PYTHON TOOLS FOR VISUAL STUDIO\2.1\CompletionDB" /log "C:\Users\lights\AppData\Local\Python Tools\CompletionDB\Debug\12.0\0180036d-fea9-4b98-950d-1253b922ddcc\2.7\AnalysisLog.txt" /glog "C:\Users\lights\AppData\Local\Python Tools\CompletionDB\Debug\12.0\AnalysisLog.txt" /wait ""

当然,内存分配失败的位置可能会是在不同的位置。

下面记录处理这个问题的过程:


首先删除python库目录下的所有子目录,让PTVS进行一次分析,此时将在C:\Users\lights\AppData\Local\PythonTools\CompletionDB\Debug\12.0\0180036d-fea9-4b98-950d-1253b922ddcc\2.7目录下生成一堆的idb文件。

然后关闭ptvs的自动分析功能:



上面的Automatically generate completion DB onfirst use

然后单独运行PTVS中的程序Microsoft.PythonTools.Analyzer.exe

Analyzer的运行参数:


/id "0180036d-fea9-4b98-950d-1253b922ddcc" 
/version 2.7 
/python F:\projects\bin\Win32\Debug\python-2.7.6.exe 
/library F:\projects\bin\Win32\Debug\Lib\genlib-2.7\ 
/outdir "F:\projects\bin\Win32\Debug\Lib\genlibdb-2.7" 
/basedb "F:\projects\bin\Win32\Debug\Lib\genlibdb-2.7" 
/log "C:\Users\lights\AppData\Local\Python Tools\CompletionDB\Debug\12.0\0180036d-fea9-4b98-950d-1253b922ddcc\2.7\AnalysisLog.txt" 
/glog "C:\Users\lights\AppData\Local\Python Tools\CompletionDB\Debug\12.0\AnalysisLog.txt"

执行此命令后将在outdir中生成一堆的idb文件,将这些文件复制到appdata下的目录中,注意如果有同名文件则不覆盖。

逐一处理库的子目录就可以了。






你可能感兴趣的:(python,MSBuild,VS2013,velt)