Giter Club home page Giter Club logo

perfview's Introduction

PerfView Overview

PerfView is a free performance-analysis tool that helps isolate CPU and memory-related performance issues. It is a Windows tool, but it also has some support for analyzing data collected on Linux machines. It works for a wide variety of scenarios, but has a number of special features for investigating performance issues in code written for the .NET runtime.

If you are unfamiliar with PerfView, there are PerfView video tutorials. Also, Vance Morrison's blog gives overview and getting started information.

Getting PerfView

Please see the PerfView Download Page for the link and instructions for downloading the current version of PerfView.

Are you here about the TraceEvent Library?

PerfView is built on a library called Microsoft.Diagnostics.Tracing.TraceEvent, that knows how to both collect and parse Event Tracing for Windows (ETW) data. Thus if there is any information that PerfView collects and processes that you would like to manipulate yourself programmatically, you would probably be interested in the TraceEvent Library Documentation

Learning about PerfView

The PerfView User's Guide is part of the application itself. In addition, you can click the Users Guide link to see the GitHub HTML Source File rendered in your browser. You can also simply download PerfView using the instructions above and select the Help -> User's Guide menu item.

Asking Questions / Reporting Bugs

When you have question about PerfView, your first reaction should be to search the Users Guide (Help -> User's Guide) and see if you can find the answer already. If that does not work you can ask a question by creating a new PerfView Issue. State your question succinctly in the title, and if necessary give details in the body of the issue, there is a issue tag called 'question' that you should use as well that marks your issue as a question rather than some bug report. If the question is specific to a particular trace (*.ETL.ZIP file) you can drag that file onto the issue and it will be downloaded. This allows those watching for issues to reproduce your environment and give much more detailed and useful answers.

Note that once you have your question answered, if the issue is likely to be common, you should strongly consider updating the documentation to include the information. The documentation is pretty much just one file https://github.com/Microsoft/perfview/blob/main/src/PerfView/SupportFiles/UsersGuide.htm. You will need to clone the repository and create a pull request (see OpenSourceGitWorkflow for instructions for setting up and creating a pull request.

Reporting bugs works pretty much the same way as asking a question. It is very likely that you will want to include the *.ETL.ZIP file needed to reproduce the problem as well as any steps and the resulting undesirable behavior.

Building PerfView Yourself

If you just want to do a performance investigation, you don't need to build PerfView yourself. Just use the one from the PerfView Download Page. However if you want new features or just want to contribute to PerfView to make it better (see issues for things people want) you can do that by following the rest of these instructions.

Tools Needed to Build PerfView

The only tools you need to build PerfView are Visual Studio 2022 and the .NET Core SDK. The Visual Studio 2022 Community Edition can be downloaded for free and, along with the .NET Core SDK, has everything you need to fetch PerfView from GitHub, build and test it. We expect you to download Visual Studio 2022 Community Edition if you don't already have Visual Studio 2022.

PerfView is mostly C# code, however there is a small amount of C++ code to implement some advanced features of PerfView (The ETWCLrProfiler dlls that allow PerfView to intercept the .NET Method calls; see .NET Call in the Collect dialog).
If you downloaded the Visual Studio 2022 Community Edition, it does not install the C++ compilation tools by default and it also does not include the Windows 10 SDK by default (we build PerfView so it can run on Win8 as well as Win10). Thus when you install Visual Studio 2022 check the 'Desktop Development with C++' option and then look the right pane to see the optional sub-components, and make sure the Windows 10 SDK is also checked (it typically is not). Installing the latest version should be OK. If you have already installed Visual Studio 2022, you can add these options by going to Control Panel -> Programs and Features -> Visual Studio 2022, and click 'Modify'. This will get you to the place where you can selecte the Desktop Development with C++ and the Windows 10 SDK. If you get any errors compiling the ETWClrProfiler* dlls, it is likely associated with getting this Win 10.0 SDK. See the troubleshooting sections below for more if you need it.

The .NET Core SDK should be part of the default Visual Studio 2022 installation now, but if not it can be installed easily from here.

Cloning the PerfView GitHub Repository.

The first step in getting started with the PerfView source code is to clone the PerfView GitHub repository. If you are already familiar with how GIT, GitHub, and Visual Studio 2022 GIT support works, then you can skip this section. However, if not, the Setting up a Local GitHub repository with Visual Studio 2022 document will lead you through the basics of doing this. All it assumes is that you have Visual Studio 2022 installed.

How to Build and Debug PerfView

PerfView is developed in Visual Studio 2022 using features through C# 6.

  • The solution file is PerfView.sln. Opening this file in Visual Studio (or double clicking on it in the Windows Explorer) and selecting Build -> Build Solution, will build it. You can also build the non-debug version from the command line using msbuild or the build.cmd file at the base of the repository. The build follows standard Visual Studio conventions, and the resulting PerfView.exe file ends up in src/PerfView/bin/BuildType/PerfView.exe. You need only deploy this one EXE to use it.

  • The solution consists of 11 projects, representing support DLLs and the main EXE. To run PerfView in the debugger you need to make sure that the 'Startup Project' is set to the 'PerfView' project so that it launches the main EXE. If the PerfView project in the Solution Explorer (on the right) is not bold, right click on the PerfView project and select 'Set as Startup Project'. After doing this 'Start Debugging' (F5) should work. (It is annoying that this is not part of the .sln file...).

Deploying your new version of Perfview

You will want to deploy the 'Release' rather than the 'Debug' version of PerfView. Thus, first set your build configuration to 'Release' (Text window in the top toolbar, or right click on the .SLN file -> Configuration Manager -> Active Solution Configuration). Next build (Build -> Build Solution (Ctrl-Shift-B)). The result will be that in the src\perfView\bin\net462\Release directory there will be among other things a PerfView.exe. This one file is all you need to deploy. Simply copy it to where you wish to deploy the app.

Information for build troubleshooting.

  • One of the unusual things about PerfView is that it incorporates its support DLLs into the EXE itself, and these get unpacked on first launch. This means that there are tricky dependencies in the build that are not typical. You will see errors that certain DLLs can't be found if there were build problems earlier in the build. Typically you can fix this simply by doing a normal (non-clean) build, since the missing file will be present from the last compilation. If this does not fix things, see if the DLL being looked for actually exists (if it does, then rebuilding should fix it). It can make sense to go down the projects one by one and build them individually to see which one fails 'first'.

  • Another unusual thing about PerfView is that it includes an extension mechanism complete with samples. This extensions mechanism is the 'Global' project (called that because it is the Global Extension whose commands don't have an explicit 'scope') and needs to refer to PerfView to resolve some of its references. Thus you will get many 'not found' issues in the 'Global' project. These can be ignored until you get every other part of the build working.

  • One of the invariants of the repo is that if you are running Visual Studio 2022 and you simply sync and build the PerfView.sln file, it is supposed to 'just work'. If that does not happen, and the advice above does not help, then we need to either fix the repo or update the advice above. Thus it is reasonable to open a GitHub issue. If you do this, the goal is to fix the problem, which means you have to put enough information into the issue to do that. This includes exactly what you tried, and what the error messages were.

  • You can also build PerfView from the command line (but you still need Visual Studio 2022 installed). It is a two step process. First you must restore all the needed nuget packages, then you do the build itself. To do this:

    1. Open a developer command prompt. You can do this by hitting the windows key (by the space bar) and type 'Developer command prompt'. You should see a entry for this that you can select (if Visual Studio 2022 is installed).
    2. Change directory to the base of your PerfView source tree (where PerfView.sln lives).
    3. Restore the nuget packages by typing the command 'msbuild /t:restore'
    4. Build perfView by typing the command 'msbuild'
  • If you get an error "MSB8036: The Windows SDK version 10.0.17763.0 was not found", Or you get a 'assert.h' not found error, or frankly any error associated with building the ETWClrProfiler dlls, you should make sure that you have the Windows 10.0.17763.0 SDK installed. Unfortunately this library tends not to be installed with Visual Studio anymore unless you ask for it explicitly. To fix it

    • windows-Key -> type Control panel -> Programs and Features, and right click on your VS2019 and select 'Modify'. Then look under the C++ Desktop Development and check that the Windows SDK 10.0.17763.0 option is selected. If not, select it and have the setup install this. Then try building PerfView again.

Running Tests

PerfView has a number of *.Test projects that have automated tests. They can be run in Visual Studio by selecting the Test -> Run -> All Tests menu item. For the most thorough results (and certainly if you intend to submit changes) you need to run these tests with a Debug build of the product (see the text window in the top toolbar, it says 'Debug' or 'Release'). If tests fail you can right click on the failed test and select the 'Debug' context menu item to run the test under the debugger to figure out what went wrong.

Check in testing and code coverage statistica

This repository uses AppVeyor and Azure DevOps to automatically build and test pull requests, which allows the community to easily view build results. Code coverage is provided by codecov.io. The build and coverage status reflected here is the AppVeyor and Azure DevOps build status of the main branch.

Build Status

Build status

codecov

⚠️ Builds produced by AppVeyor and Azure DevOps CI are not considered official builds of PerfView, and are not signed or otherwise validated for safety or security in any way. This build integration is provided as a convenience for community participants, but is not endorsed by Microsoft nor is it considered an official release channel in any way. For information about official builds, see the PerfView Download Page page.

Contributing to PerfView

You can get a lot of value out of the source code base simply by being able to build the code yourself, debug through it or make a local, specialized feature, but the real power of open source software happens when you contribute back to the shared code base and thus help the community as a whole. While we encourage this it requires significantly more effort on your part. If you are interested in stepping up, see the PerfView Contribution Guide and PerfView Coding Standards before you start.

Code Organization

The code is broken into several main sections:

  • PerfView - GUI part of the application
    • StackViewer - GUI code for any view with the 'stacks' suffix
    • EventViewer - GUI code for the 'events' view window
    • Dialogs - GUI code for a variety of small dialog boxes (although the CollectingDialog is reasonably complex)
    • Memory - Contains code for memory investigations, in particular it defines 'Graph' and 'MemoryGraph' which are used to display node-arc graphs (e.g. GC heaps)
  • TraceEvent - Library that understands how to decode Event Tracing for Windows (ETW) which is used to actually collect the data for many investigations
  • MainWindow - GUI code for the window that is initially launched (lets you select files or collect new data)
  • ETWClrProfiler* - There are two projects that build the same source either 32 or 64 bit. This is (the only) native code project in PerfView, and implements the CLR Profiler API and emits ETW events. It is used to trace object allocation stacks and .NET method calls.
  • HeapDump* There are 32 and 64 bit versions of this project. These make standalone executables that can dump the GC heap using Microsoft.Diagnostics.Runtime APIs. This allows getting heap dumps from debugger process dumps.
  • Global - An example of using PerfView's extensibility mechanism
  • CSVReader - old code that lets PerfView read .ETL.CSV files generated by XPERF (probably will delete)
  • Zip - a clone of System.IO.Compression.dll so that PerfView can run on pre V4.5 runtimes (probably will delete)

Other Documentation

These docs are for specialized scenarios

  • Updating SupportFiles PerfView uses some binary files that it does not build itself. We created two nuget packages to hold these. This document tells you how to update this nuget package when these files need to be updated. Very few people should care about these instructions.

  • Internal Docs This is documentation that is only useful for internal Microsoft users. By design the link will not work for most people.

perfview's People

Contributors

adamsitnik avatar agunderman10 avatar brianrob avatar cincuranet avatar cshung avatar davidwrighton avatar davkean avatar davmason avatar dependabot[bot] avatar github-john-doe avatar ilabutin avatar jeffschwmsft avatar kae7in avatar kant2002 avatar kouvel avatar kunalspathak avatar leculver avatar mjsabby avatar mokosan avatar mpeyrotc avatar noahfalk avatar northtyphoon avatar ooooolivia avatar pharring avatar puneetg1983 avatar sharwell avatar sywhang avatar vancem avatar wardengnaw avatar xiaomi7732 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

perfview's Issues

System.ArgumentOutOfRangeException when opening Linux trace

With perfcollect I collected a dotnet performance trace and I brought it over to Windows to open with PerfView. When I double-click the file I get this exception:

: Opening linux_trace.trace.zip
Creating ETLX file C:\Users\segilles\AppData\Local\Temp\PerfView\linux_trace.trace_4e0e7f68.etlx from \\segilles2\public\6-24-2016\linux_trace.trace.zip
Warning: Trying to open CTF stream failed, no CTF (lttng) information
Completed: Opening linux_trace.trace.zip   (Elapsed Time: 0.166 sec)
Started: Opening CPU Stacks
Completed: Opening CPU Stacks   (Elapsed Time: 0.039 sec)
Exception Occurred: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at Diagnostics.Tracing.StackSources.LinuxPerfScriptStackSource.AddSamples(IEnumerable`1 _samples) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 306
   at Diagnostics.Tracing.StackSources.ParallelLinuxPerfScriptStackSource.DoInterning() in C:\Users\vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 98
   at Diagnostics.Tracing.StackSources.LinuxPerfScriptStackSource.InternAllLinuxEvents(Stream stream) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 351
   at Diagnostics.Tracing.StackSources.LinuxPerfScriptStackSource..ctor(String path, Boolean doThreadTime) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 266
   at Diagnostics.Tracing.StackSources.ParallelLinuxPerfScriptStackSource..ctor(String path, Boolean doThreadTime) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 20
   at PerfView.LinuxPerfViewData.OpenStackSourceImpl(String streamName, TextWriter log, Double startRelativeMSec, Double endRelativeMSec, Predicate`1 predicate) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\PerfViewData.cs:line 6015
   at PerfView.PerfViewStackSource.OpenStackSource(String streamName, TextWriter log, Double startRelativeMSec, Double endRelativeMSec, Predicate`1 predicate) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\PerfViewData.cs:line 2309
   at PerfView.PerfViewStackSource.<>c__DisplayClass23_0.<Open>b__0() in C:\Users\vancem\Source\Repos\perfview\src\PerfView\PerfViewData.cs:line 2327
   at PerfView.StatusBar.<>c__DisplayClass19_0.<StartWork>b__0(Object <state>) in C:\Users\vancem\Source\Repos\perfview\src\PerfView\GuiUtilities\StatusBar\StatusBar.xaml.cs:line 216
An exceptional condition occurred, see log for details.

In all likelihood I'm doing this wrong ("Trying to open CTF stream failed, no CTF (lttng) information"), but this seems like a bug anyway. The trace is hosted at \\segilles2\public\6-24-2016\linux_trace.trace.zip.

The PerfView version I'm running is the one currently hosted on \\clrmain\tools\PerfView.exe, so it could be out-of-date.

Stack overflow if wininit's parent's PID is recycled

I have a trace which causes a stack overflow when opening the "Processes / Files / Registry Stacks" view.
The problem is that the parent process of wininit.exe has exited, but its PID was re-used for another process, svchost.exe whose parent is services.exe whose parent is wininit.exe.

Reading the DCStart events, we have:

Time MSec Process Name ProcessID ParentID
4.252 Idle (0) 0 0
4.259 System (4) 4 0
4.508 smss (468) 468 4
4.541 csrss (612) 612 576
4.645 wininit (700) 700 576
4.704 csrss (708) 708 692
4.793 winlogon (796) 796 692
4.909 services (868) 868 700
4.989 lsass (876) 876 700
5.414 svchost (984) 984 868
5.722 svchost (380) 380 868
5.921 svchost (576) 576 868

(I've bolded the interesting processes). ProcExp is pretty clear that wininit's parent has terminated and that it's not the svchost with PID 576.

There doesn't seem to be any metadata in the DCStart events to indicate that a process' parent might have terminated. At first glance, it might appear that it's ascending PID order, but notice that the last three rows in the table above are not. It appears to be the case that the DCStart rundown is in breadth-first tree traversal order.

If we make that assumption, then when we process the DCStart events (in order), we can detect whether a parent PID has been seen before and, if not, set the parent ID to 0

Two-tier symbol cache not supported

I regularly use WinDbg to debug issue, so I have a fairly large local cache. It is great that PerfView recognizes the _NT_SYMBOL_PATH environment variable. However, it fails to recognize when a local symbol path is configured to be two-tier. This is accomplished by adding a blank text file index2.txt to the root of the local symbol cache path. By doing this, symbols are grouped into folders by the first two characters of the symbol name. For example, clr.pdb would be located in a "cl" folder, along with other symbols beginning with "cl", such as clrcompression.pdb, clrjit.pdb etc.

I noticed this issue when loading missing symbols. The download seemed to take quite a bit of time, especially considering that I should already have had the symbols locally. Looking into the log, I noticed that 1) it appears to not even look for the symbol in my local symbol cache, and 2) saves the downloaded symbol directly into the local symbol path root, which is now useless for other programs (WinDbg etc) that share the path but will not find this symbol since it is mis-filed for the two-tier symbol hierarchy.

Below is the log output for loading clr.pdb.

[Looking up symbols for clr]
[Loading symbols for c:\windows\microsoft.net\framework\v4.0.30319\clr.dll]
FindSymbolFilePath: *{ Locating PDB clr.pdb GUID df1e3528-29be-4d0e-9457-4c8ccfdc278a Age 2 Version 4.6.1586.0 built by: NETFXREL2
FindSymbolFilePath: Pdb is for DLL c:\windows\microsoft.net\framework\v4.0.30319\clr.dll
FindSymbolFilePath: Probed file location D:\Users\Ben\Downloads\PerfView\clr.pdb does not exist
FindSymbolFilePath: Probed file location C:\Symbols\Local\clr.pdb does not exist
FindSymbolFilePath: Searching Symbol Server http://referencesource.microsoft.com/symbols.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/file.ptr was not found.
Trying the XX/XXYYY.PDB convention
FindSymbolFilePath: Searching Symbol Server http://referencesource.microsoft.com/symbols.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/file.ptr was not found.
FindSymbolFilePath: Searching Symbol Server http://msdl.microsoft.com/download/symbols.

FindSymbolFilePath: Waiting for initial connection to http://msdl.microsoft.com/download/symbols/clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb.
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.
CopyStreamToFile: Copying http://msdl.microsoft.com/download/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ to C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_.new

FindSymbolFilePath: Waiting for initial connection to http://msdl.microsoft.com/download/symbols/clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_.
.............
FindSymbolFilePath: Copy in progress on http://msdl.microsoft.com/download/symbols/clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_, waiting for completion.
..
.
...
...
..
...
...
...
..
....
....
.....
...
.
..
...
..
....
....
......
.......
.....
........
......
. 1.0 Meg
..........
..........
...........
..............
....
.
.

CopyStreamToFile: Copy not complete, deleting temp copy to file
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ failed: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/file.ptr was not found.
Trying the XX/XXYYY.PDB convention
FindSymbolFilePath: Searching Symbol Server http://msdl.microsoft.com/download/symbols.
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ was not found.
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/file.ptr was not found.
FindSymbolFilePath: Checking relative to DLL path c:\windows\microsoft.net\framework\v4.0.30319\clr.dll
FindSymbolFilePath: Probed file location c:\windows\microsoft.net\framework\v4.0.30319\clr.pdb does not exist
FindSymbolFilePath: Probed file location c:\windows\microsoft.net\framework\v4.0.30319\symbols.pri\retail\dll\clr.pdb does not exist
FindSymbolFilePath: Probed file location c:\windows\microsoft.net\framework\v4.0.30319\symbols\retail\dll\clr.pdb does not exist
FindSymbolFilePath: *} Failed to find PDB clr.pdb GUID df1e3528-29be-4d0e-9457-4c8ccfdc278a Age 2 Version 4.6.1586.0 built by: NETFXREL2
Data collected on current machine, looking up PDB by inspecting information in EXE.
FindSymbolFilePathForModule: searching for PDB for DLL c:\windows\microsoft.net\framework\v4.0.30319\clr.dll.
FindSymbolFilePath: *{ Locating PDB clr.pdb GUID df1e3528-29be-4d0e-9457-4c8ccfdc278a Age 2 Version 4.6.1586.0 built by: NETFXREL2
FindSymbolFilePath: Pdb is for DLL c:\windows\microsoft.net\framework\v4.0.30319\clr.dll
FindSymbolFilePath: Probed file location D:\Users\Ben\Downloads\PerfView\clr.pdb does not exist
FindSymbolFilePath: Probed file location C:\Symbols\Local\clr.pdb does not exist
FindSymbolFilePath: Searching Symbol Server http://referencesource.microsoft.com/symbols.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/file.ptr was not found.
Trying the XX/XXYYY.PDB convention
FindSymbolFilePath: Searching Symbol Server http://referencesource.microsoft.com/symbols.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ was not found.
FindSymbolFilePath: Probe of http://referencesource.microsoft.com/symbols/cl/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/file.ptr was not found.
FindSymbolFilePath: Searching Symbol Server http://msdl.microsoft.com/download/symbols.

FindSymbolFilePath: Waiting for initial connection to http://msdl.microsoft.com/download/symbols/clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb.
FindSymbolFilePath: Probe of http://msdl.microsoft.com/download/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pdb was not found.

FindSymbolFilePath: Waiting for initial connection to http://msdl.microsoft.com/download/symbols/clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_.
CopyStreamToFile: Copying http://msdl.microsoft.com/download/symbols/clr.pdb/df1e352829be4d0e94574c8ccfdc278a2/clr.pd_ to C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_.new

FindSymbolFilePath: Copy in progress on http://msdl.microsoft.com/download/symbols/clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_, waiting for completion.
.
....
....
.........
........
...........
...................
...............
...............
.............. 1.0 Meg
.
.....................
.............................
......................
........................... 2.0 Meg
..............................
..........................
.................................
........... 3.0 Meg
...............................
......................................
............................... 4.0 Meg
........
..............................................
.......................................
....... 5.0 Meg
............
CopyStreamToFile: Copy Done, moving to C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_
FindSymbolFilePath: Expanding C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pd_ to C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb
FindSymbolFilePath: *} Successfully found PDB C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb GUID df1e3528-29be-4d0e-9457-4c8ccfdc278a Age 2 Version 4.6.1586.0 built by: NETFXREL2
FindSymbolFilePathForModule returns C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb
Opening PDB C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb with signature GUID df1e3528-29be-4d0e-9457-4c8ccfdc278a Age 2
Opened Pdb file C:\Symbols\Cache\clr.pdb\df1e352829be4d0e94574c8ccfdc278a2\clr.pdb
Loaded, resolving symbols
Warning: NOT IN RANGE: address 0x17363 start 16dc0 end 16dea Offset 5a3 Len 2a, symbol @JIT_IsInstanceOfClass@8, prefixing with ??.
Warning: NOT IN RANGE: address 0x1736b start 16dc0 end 16dea Offset 5ab Len 2a, symbol @JIT_IsInstanceOfClass@8, prefixing with ??.
Warning: NOT IN RANGE: address 0x1c9bf start 1991c end 1996f Offset 30a3 Len 53, symbol ?ArrayCopyNoTypeCheck@ArrayNative@@CGXPAVArrayBase@@I0II@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1ec6e start 1ed50 end 1f8df Offset ffffff1e Len b8f, symbol ?InvokeMethod@RuntimeMethodHandle@@SIPAVObject@@PAV2@PAVPtrArray@@_NPAVSignatureNative@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x23042 start 22c00 end 22ca5 Offset 442 Len a5, symbol ?Alloc@GCHeap@WKS@@UAEPAVObject@@PAUalloc_context@@II@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x2b263 start 11bbf9 end 11bd17 Offset fff0f66a Len 11e, symbol ?DoExtraWorkForFinalizer@Thread@@QAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x2b2cd start 11bbf9 end 11bd17 Offset fff0f6d4 Len 11e, symbol ?DoExtraWorkForFinalizer@Thread@@QAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x2b39a start 11bbf9 end 11bd17 Offset fff0f7a1 Len 11e, symbol ?DoExtraWorkForFinalizer@Thread@@QAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x2b410 start 11bbf9 end 11bd17 Offset fff0f817 Len 11e, symbol ?DoExtraWorkForFinalizer@Thread@@QAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x2c40e start 17330 end 17345 Offset 150de Len 15, symbol @JIT_ChkCastClassSpecial@8, prefixing with ??.
Warning: NOT IN RANGE: address 0x2ccf1 start 2cd70 end 2cd93 Offset ffffff81 Len 23, symbol __DllMainCRTStartup@12, prefixing with ??.
Warning: NOT IN RANGE: address 0x2cd06 start 2cd70 end 2cd93 Offset ffffff96 Len 23, symbol __DllMainCRTStartup@12, prefixing with ??.
Warning: NOT IN RANGE: address 0x2fcad start 1c847 end 1c8ce Offset 13466 Len 87, symbol ?GetManagedClassObjectFast@TypeHandle@@QBEPAVObject@@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x30e5c start 1c7c0 end 1cc66 Offset 1469c Len 4a6, symbol ?EnumInit@MDInternalRO@@UAGJKIPAUHENUMInternal@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x34822 start 34802 end 34822 Offset 20 Len 20, symbol ?GetNumGenericArgs@MethodTable@@QAEKXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x36db5 start 3047a end 31043 Offset 693b Len bc9, symbol ?GetTypeHandleThrowing@SigPointer@@QBE?AVTypeHandle@@PAVModule@@PBVSigTypeContext@@W4LoadTypesFlag@ClassLoader@@W4ClassLoadLevel@@HPBVSubstitution@@PBUContext@ZapSig@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x3713a start 3047a end 31043 Offset 6cc0 Len bc9, symbol ?GetTypeHandleThrowing@SigPointer@@QBE?AVTypeHandle@@PAVModule@@PBVSigTypeContext@@W4LoadTypesFlag@ClassLoader@@W4ClassLoadLevel@@HPBVSubstitution@@PBUContext@ZapSig@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x38b02 start 380ce end 388f0 Offset a34 Len 822, symbol ?FindOrCreateAssociatedMethodDesc@MethodDesc@@SGPAV1@PAV1@PAVMethodTable@@HVInstantiation@@HHHW4ClassLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x405f3 start 32ce4 end 333de Offset d90f Len 6fa, symbol ?DoPrestub@MethodDesc@@QAEKPAVMethodTable@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x43a3f start 43837 end 43863 Offset 208 Len 2c, symbol ?Release@MethodData@MethodTable@@QAEKXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x43aab start 43860 end 439c9 Offset 24b Len 169, symbol ?GetMethodDataHelper@MethodTable@@KGPAVMethodData@1@PAV1@0H@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x43ed1 start 34d76 end 3530e Offset f15b Len 598, symbol ?GetDescFromMemberRef@MemberLoader@@SGXPAVModule@@IPAPAVMethodDesc@@PAPAVFieldDesc@@PBVSigTypeContext@@HPAVTypeHandle@@HPAPBEPAK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x442cc start 442f8 end 44492 Offset ffffffd4 Len 19a, symbol ?FindMethod@MemberLoader@@SGPAVMethodDesc@@PAVMethodTable@@PBDPBEKPAVModule@@W4FM_Flags@1@PBVSubstitution@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x448d8 start 46afa end 46b9e Offset ffffddde Len a4, symbol ??_U@YAPAXIPAVStackingAllocator@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x451c4 start 32235d end 322582 Offset ffd22e67 Len 225, symbol ?ThrowTypeAccessException@@YGXPAVMethodDesc@@PAVMethodTable@@HIPAVException@@H@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x46d8c start 35092 end 353ff Offset 11cfa Len 36d, symbol ?LoadTypeDefThrowing@ClassLoader@@SG?AVTypeHandle@@PAVModule@@IW4NotFoundAction@1@W4PermitUninstantiatedFlag@1@IW4ClassLoadLevel@@PAVInstantiation@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x474be start 45fce end 46134 Offset 14f0 Len 166, symbol ?DoIncrementalLoad@ClassLoader@@CG?AVTypeHandle@@PAVTypeKey@@V2@W4ClassLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x485d5 start 43d61 end 4450a Offset 4874 Len 7a9, symbol ?CompareElementType@MetaSig@@SGHAAPBE0PBE1PAVModule@@2PBVSubstitution@@3PAVTokenPairList@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x48bd2 start 30904 end 30a44 Offset 182ce Len 140, symbol ?LoadConstructedTypeThrowing@ClassLoader@@CG?AVTypeHandle@@PAVTypeKey@@W4LoadTypesFlag@1@W4ClassLoadLevel@@PBVInstantiationContext@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4922c start 3e0ea end 3e1bc Offset b142 Len d2, symbol ?LoadTypeDefOrRefOrSpecThrowing@ClassLoader@@SG?AVTypeHandle@@PAVModule@@IPBVSigTypeContext@@W4NotFoundAction@1@W4PermitUninstantiatedFlag@1@W4LoadTypesFlag@1@W4ClassLoadLevel@@HPBVSubstitution@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x49260 start 3e0ea end 3e1bc Offset b176 Len d2, symbol ?LoadTypeDefOrRefOrSpecThrowing@ClassLoader@@SG?AVTypeHandle@@PAVModule@@IPBVSigTypeContext@@W4NotFoundAction@1@W4PermitUninstantiatedFlag@1@W4LoadTypesFlag@1@W4ClassLoadLevel@@HPBVSubstitution@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4a49e start 3e1a8 end 3e1e3 Offset c2f6 Len 3b, symbol ??1?$BaseWrapper@PAUIActionOnCLREvent@@V?$FunctionBase@PAUIActionOnCLREvent@@$1??$DoNothing@PAUIActionOnCLREvent@@@@YGXPAU1@@Z$1??$DoTheRelease@UIActionOnCLREvent@@@@YGX0@Z$01@@$0A@$1??$CompareDefault@PAUIActionOnCLREvent@@@@YGHPAU1@0@Z$01@@QAE@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x4c815 start 47433 end 47788 Offset 53e2 Len 355, symbol ?CreateTypeHandleForTypeKey@ClassLoader@@CG?AVTypeHandle@@PAVTypeKey@@PAVAllocMemTracker@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4c84a start 47433 end 47788 Offset 5417 Len 355, symbol ?CreateTypeHandleForTypeKey@ClassLoader@@CG?AVTypeHandle@@PAVTypeKey@@PAVAllocMemTracker@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4f048 start 52a35 end 52c34 Offset ffffc613 Len 1ff, symbol ?canReplaceMethodOnStack@@YGHPAVMethodDesc@@00@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4f7e0 start 5c11c end 5c189 Offset ffff36c4 Len 6d, symbol ?ModifyCheckForDynamicMethod@@YGHPAVDynamicResolver@@PAVTypeHandle@@PAW4AccessCheckType@AccessCheckOptions@@PAPAV1@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4fcad start 4f133 end 4f15c Offset b7a Len 29, symbol ?GetMethodForSecurity@CEEInfo@@QAEPAVMethodDesc@@PAUCORINFO_METHOD_STRUCT_@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x517b0 start 32ce4 end 333de Offset 1eacc Len 6fa, symbol ?DoPrestub@MethodDesc@@QAEKPAVMethodTable@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x52cdf start 4f3d0 end 4f979 Offset 390f Len 5a9, symbol ?resolveToken@CEEInfo@@UAEXPAUCORINFO_RESOLVED_TOKEN@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x53489 start 4f5a2 end 4f807 Offset 3ee7 Len 265, symbol ?ConvToJitSig@CEEInfo@@SGXPBEKPAUCORINFO_MODULE_STRUCT_@@IPAUCORINFO_SIG_INFO@@PAVMethodDesc@@_NVTypeHandle@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x53c6a start 34d76 end 3530e Offset 1eef4 Len 598, symbol ?GetDescFromMemberRef@MemberLoader@@SGXPAVModule@@IPAPAVMethodDesc@@PAPAVFieldDesc@@PBVSigTypeContext@@HPAVTypeHandle@@HPAPBEPAK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x53ce6 start 543b0 end 548e1 Offset fffff936 Len 531, symbol ?getFieldInfo@CEEInfo@@UAEXPAUCORINFO_RESOLVED_TOKEN@@PAUCORINFO_METHOD_STRUCT_@@W4CORINFO_ACCESS_FLAGS@@PAUCORINFO_FIELD_INFO@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x5469b start 451d6 end 45329 Offset f4c5 Len 153, symbol ?CheckCriticalAccess@SecurityTransparent@@YGHPAVAccessCheckContext@@PAVMethodDesc@@PAVFieldDesc@@PAVMethodTable@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x54a4f start 34d76 end 3530e Offset 1fcd9 Len 598, symbol ?GetDescFromMemberRef@MemberLoader@@SGXPAVModule@@IPAPAVMethodDesc@@PAPAVFieldDesc@@PBVSigTypeContext@@HPAVTypeHandle@@HPAPBEPAK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x54cd7 start 51e40 end 521d0 Offset 2e97 Len 390, symbol ?getArgType@CEEInfo@@UAE?AW4CorInfoTypeWithMod@@PAUCORINFO_SIG_INFO@@PAUCORINFO_ARG_LIST_STRUCT_@@PAPAUCORINFO_CLASS_STRUCT_@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x5645a start 52190 end 5306b Offset 42ca Len edb, symbol ?getCallInfo@CEEInfo@@UAEXPAUCORINFO_RESOLVED_TOKEN@@0PAUCORINFO_METHOD_STRUCT_@@W4CORINFO_CALLINFO_FLAGS@@PAUCORINFO_CALL_INFO@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x59d70 start 6918f end 69eb8 Offset ffff0be1 Len d29, symbol ?InitializeFieldDescs@MethodTableBuilder@@AAEXPAVFieldDesc@@PBULayoutRawFieldInfo@@PAUbmtInternalInfo@1@PBUbmtGenericsInfo@1@PAUbmtMetaDataInfo@1@PAUbmtEnumFieldInfo@1@PAUbmtErrorInfo@1@PAPAPAVMethodTable@@PAUbmtMethAndFieldDescs@1@PAUbmtFieldPlacement@1@PAUbmtContextStaticInfo@1@PAI@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x5def5 start 40479 end 404ce Offset 1da7c Len 55, symbol ?JitILStub@@YGKPAVMethodDesc@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x64558 start 380ce end 388f0 Offset 2c48a Len 822, symbol ?FindOrCreateAssociatedMethodDesc@MethodDesc@@SGPAV1@PAV1@PAVMethodTable@@HVInstantiation@@HHHW4ClassLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x6aab7 start 6a9aa end 6a9da Offset 10d Len 30, symbol ?IterateInterfaceSlots@bmtInterfaceEntry@MethodTableBuilder@@QAE?AV?$ArrayIterator@VbmtInterfaceSlotImpl@MethodTableBuilder@@@IteratorUtil@@PAVStackingAllocator@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x6d075 start 6a5f2 end 6acc2 Offset 2a83 Len 6d0, symbol ?ProcessMethodImpls@MethodTableBuilder@@AAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x6dde8 start 30237 end 30481 Offset 3dbb1 Len 24a, symbol ?LoadTypeDefOrRefThrowing@ClassLoader@@SG?AVTypeHandle@@PAVModule@@IW4NotFoundAction@1@W4PermitUninstantiatedFlag@1@IW4ClassLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x75251 start 7568b end 7601a Offset fffffbc6 Len 98f, symbol ??$id_Parser_ParseIdentity@U_LUNICODE_STRING@@@@YGJKU_IDENTITY_TYPE@Rtl@Isolation@Windows@@PBU_LUNICODE_STRING@@P6IEPAU_RTL_ALLOCATION_LIST@@PAU4@33PAX@Z4PAU_BASE_IDENTITY@123@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x7680a start 229660 end 229690 Offset ffe4d1aa Len 30, symbol ?Allocate@?$CSmartPtr@V?$CSmartPtrTraits@U_TSHANDLE_LEVEL_1_TABLE@@@Nt@BCL@@@BCL@@QAE?AVCCallDisposition@Nt@2@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x79979 start bd666 end bded1 Offset fffbc313 Len 86b, symbol ?GetTextualIdentity@CAssemblyName@@QAGJPAGPAKK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x7ea29 start 29ee8 end 29f3c Offset 54b41 Len 54, symbol ?EnsureLoadLevel@DomainFile@@QAEXW4FileLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x8a0c9 start bb0df end bb21e Offset fffcefea Len 13f, symbol ?GetLayout@PEImage@@QAEPAVPEImageLayout@@KK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x8a104 start bb05a end bb2b6 Offset fffcf0aa Len 25c, symbol ?GetLayoutInternal@PEImage@@AAEPAVPEImageLayout@@KK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x8cd0a start 89430 end 89765 Offset 38da Len 335, symbol ?Initialize@Module@@MAEXPAVAllocMemTracker@@PBG@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x8d483 start b71ea end b7297 Offset fffd6299 Len ad, symbol ??1NativeImageCandidatesEnumerator@NATIVE_BINDER_SPACE@@QAE@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x8dba8 start 8dcb4 end 8dcfc Offset fffffef4 Len 48, symbol ??1Reader@AuxFile@NATIVE_BINDER_SPACE@@QAE@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x8f54a start af340 end af871 Offset fffe020a Len 531, symbol ?Allocate@DomainAssembly@@EAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0xacf6a start df533 end df5b5 Offset fffcda37 Len 82, symbol ?CLRLoadLibrary@@YGPAUHINSTANCE__@@PBG@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xadc6a start ae92f end aea57 Offset fffff33b Len 128, symbol ?DoIncrementalLoad@DomainFile@@IAEHW4FileLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xae8a9 start ae616 end ae856 Offset 293 Len 240, symbol ?LoadDomainFile@AppDomain@@QAEPAVDomainFile@@PAVFileLoadLock@@W4FileLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xaec3e start 40fa3 end 4107f Offset 6dc9b Len dc, symbol ?LoadDomainFile@AppDomain@@QAEXPAVDomainFile@@W4FileLoadLevel@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xaf313 start ae049 end ae29f Offset 12ca Len 256, symbol ?LoadDomainAssemblyInternal@AppDomain@@QAEPAVDomainAssembly@@PAVAssemblySpec@@PAVPEAssembly@@W4FileLoadLevel@@PAUAssemblyLoadSecurity@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xc11ed start ae160 end ae443 Offset 1308d Len 2e3, symbol ?LoadDomainAssembly@AppDomain@@QAEPAVDomainAssembly@@PAVAssemblySpec@@PAVPEAssembly@@W4FileLoadLevel@@PAUAssemblyLoadSecurity@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xc3f5a start 4b800 end 4c17d Offset 7875a Len 97d, symbol ?LoadLibraryModule@NDirect@@SGPAUHINSTANCE__@@PAVNDirectMethodDesc@@PAVLoadLibErrorTracker@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xc6495 start 184a5c end 184cae Offset fff41a39 Len 252, symbol ___delayLoadHelper2@8, prefixing with ??.
Warning: NOT IN RANGE: address 0xf9c9f start f9d2f end fa025 Offset ffffff70 Len 2f6, symbol ?GetLibrary@CCompRC@@AAEJKPAPAUHINSTANCE__@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0xfdf7f start 4f7f0 end 4fbae Offset ae78f Len 3be, symbol ?initClass@CEEInfo@@UAE?AW4CorInfoInitClassResult@@PAUCORINFO_FIELD_STRUCT_@@PAUCORINFO_METHOD_STRUCT_@@1H@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1001d0 start 4c715 end 4c9a7 Offset b3abb Len 292, symbol ?TryFindDynLinkZapType@ClassLoader@@CG?AVTypeHandle@@PAVTypeKey@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x104528 start 2cd70 end 2cd93 Offset d77b8 Len 23, symbol __DllMainCRTStartup@12, prefixing with ??.
Warning: NOT IN RANGE: address 0x10456b start 2cd92 end 2ce11 Offset d77d9 Len 7f, symbol _DllMain@12, prefixing with ??.
Warning: NOT IN RANGE: address 0x104e77 start 10735c end 1073b4 Offset ffffdb1b Len 58, symbol ?EnsureGateThreadRunning@ThreadpoolMgr@@CGXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x10b145 start 10adf1 end 10ae8a Offset 354 Len 99, symbol ?GetTLM@ThreadStatics@@SGPAUThreadLocalModule@@UModuleIndex@@PAVModule@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x11025b start 52190 end 5306b Offset be0cb Len edb, symbol ?getCallInfo@CEEInfo@@UAEXPAUCORINFO_RESOLVED_TOKEN@@0PAUCORINFO_METHOD_STRUCT_@@W4CORINFO_CALLINFO_FLAGS@@PAUCORINFO_CALL_INFO@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x111f9e start 47821 end 47d35 Offset ca77d Len 514, symbol ?LoadExactInterfaceMap@MethodTableBuilder@@SGXPAVMethodTable@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x117242 start bf2b5 end bf661 Offset 57f8d Len 3ac, symbol ?GetDataFromBlob@COMCustomAttribute@@CG_KPAVAssembly@@W4CorSerializationType@@VTypeHandle@@PAPAEPBEPAVModule@@PAH@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x119b1d start 183568 end 1835af Offset fff965b5 Len 47, symbol ?TrackErrorCode@LoadLibErrorTracker@@QAEXK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x11e323 start c9550 end c9945 Offset 54dd3 Len 3f5, symbol ?GetPropertyOrFieldData@COMCustomAttribute@@SIXPAVReflectModuleBaseObject@@PAPAEPAPAVObject@@2PA_NPAPAVStringObject@@PAE@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1278dc start 127b29 end 127b85 Offset fffffdb3 Len 5c, symbol ?SetCpuInfo@EEJitManager@@AAEXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x127a64 start 50659 end 5078a Offset d740b Len 131, symbol ?LoadJIT@EEJitManager@@QAEHXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x129183 start 140b0a end 140d61 Offset fffe8679 Len 257, symbol ?RunMain@@YGJPAVMethodDesc@@FPAHPAPAVPtrArray@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1374a7 start 1bc4f1 end 1bc7e7 Offset fff7afb6 Len 2f6, symbol ?ExecuteDLL@@YGHPAUHINSTANCE__@@KPAXH@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1374b4 start 1bc4f1 end 1bc7e7 Offset fff7afc3 Len 2f6, symbol ?ExecuteDLL@@YGHPAUHINSTANCE__@@KPAXH@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x138144 start 2968d0 end 296aab Offset ffea1874 Len 1db, symbol _EEDllUnregisterServer@4, prefixing with ??.
Warning: NOT IN RANGE: address 0x13ffe5 start 2cc4f end 2ce6c Offset 113396 Len 21d, symbol __CRT_INIT@12, prefixing with ??.
Warning: NOT IN RANGE: address 0x1401f8 start 136d91 end 136f03 Offset 9467 Len 172, symbol _AuxUlibInitialize@0, prefixing with ??.
Warning: NOT IN RANGE: address 0x165fef start 104461 end 104631 Offset 61b8e Len 1d0, symbol ?EEDllMain@@YGHPAUHINSTANCE__@@KPAX@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x166203 start 77176 end 771aa Offset ef08d Len 34, symbol ??_C@_0DE@BJCBANKC@d?3?2iso_whid?2x86fre?2base?2ntos?2rtl@FNODOBFM@, prefixing with ??.
Warning: NOT IN RANGE: address 0x1677b0 start 16be49 end 16c45e Offset ffffb967 Len 615, symbol ?EEShutDownHelper@@YGXH@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x16c626 start 2d5ff3 end 2d60eb Offset ffe96633 Len f8, symbol ?DisableRuntime@@YGXW4ShutdownCompleteAction@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x16c63c start 2d5ff3 end 2d60eb Offset ffe96649 Len f8, symbol ?DisableRuntime@@YGXW4ShutdownCompleteAction@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x177fbf start 177b90 end 177bc2 Offset 42f Len 32, symbol ?Release@?$_unknown@UIStream@@$1?IID_IStream@@3U_GUID@@B@@UAGKXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x1954e4 start 36694 end 366ae Offset 15ee50 Len 1a, symbol ?IsNativeLoaded@PEFile@@QAEHXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x196718 start 194ba7 end 19512b Offset 1b71 Len 584, symbol _ExternalMethodFixupWorker@16, prefixing with ??.
Warning: NOT IN RANGE: address 0x196f8d start 35ff0 end 3612d Offset 160f9d Len 13d, symbol ?vSearchTable@CMiniMd@@MAEJKUCMiniColDef@@KPAK@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1ab661 start 1036e0 end 1037f6 Offset a7f81 Len 116, symbol ?SetupThreadNoThrow@@YGPAVThread@@PAJ@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1ab9e9 start 1ab3e4 end 1ab8a0 Offset 605 Len 4bc, symbol ?SetupThread@@YGPAVThread@@H@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1aba36 start 10724b end 107418 Offset a47eb Len 1cd, symbol ?MaybeAddWorkingWorker@ThreadpoolMgr@@CGXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x1aba77 start 106f00 end 10759f Offset a4b77 Len 69f, symbol ?WorkerThreadStart@ThreadpoolMgr@@CGKPAX@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1abdd8 start 17150 end 17170 Offset 194c88 Len 20, symbol ?GetCurrentThread@ThreadNative@@SIPAVObject@@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x1abe4e start 1953a0 end 1953c4 Offset 16aae Len 24, symbol ?GetManagedThreadId@ThreadNative@@SIHPAVThreadBaseObject@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1b4ae1 start 2fd10 end 2fdb6 Offset 184dd1 Len a6, symbol ?GetBlob@StgBlobPoolReadOnly@@UAEJIPAVDataBlob@MetaData@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x1b4af8 start 1b4a3e end 1b4ae8 Offset ba Len aa, symbol ?GetData@HotHeap@MetaData@@QAEJIPAVDataBlob@2@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x295130 start 16be49 end 16c45e Offset 1292e7 Len 615, symbol ?EEShutDownHelper@@YGXH@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x2e7224 start 1aac3a end 1aac95 Offset 13c5ea Len 5b, symbol ?FireThreadCreated@ThreadLog@ETW@@SGXPAVThread@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x2ea522 start 50d11 end 50ec5 Offset 299811 Len 1b4, symbol ?MethodJitted@MethodLog@ETW@@SGXPAVMethodDesc@@PAVSString@@11KI@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x2ea5f8 start 5097c end 50aa6 Offset 299c7c Len 12a, symbol ?MethodJitting@MethodLog@ETW@@SGXPAVMethodDesc@@PAVSString@@11@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x2eaf27 start 1677b5 end 1678a8 Offset 183772 Len f3, symbol ?ProcessShutdown@EnumerationLog@ETW@@SGXXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x3023c3 start af7e0 end af832 Offset 252be3 Len 52, symbol ?NotifyEtwLoadFinished@Module@@QAEXJ@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x312b0f start 12837c end 1286af Offset 1ea793 Len 333, symbol ?InitializeDefaultDomain@SystemDomain@@SGXHPAUICLRPrivBinder@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x32a411 start 1038b4 end 1038e6 Offset 226b5d Len 32, symbol ?SendEtwAddMemoryPressureEvent@GCInterface@@SGX_K@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x408105 start 22e01 end 22fcc Offset 3e5304 Len 1cb, symbol ?try_allocate_more_space@gc_heap@WKS@@KGHPAUalloc_context@@IH@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x4170a4 start 898e5 end 89ae5 Offset 38d7bf Len 200, symbol ?LogTargetFrameworkAttribute@Logger@CLRTraceLog@@SGXPBGPBD@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x44ef34 start 133f94 end 134069 Offset 31afa0 Len d5, symbol ?GetRestrictedPhysicalMemoryLimit@GCToOSInterface@@SG_KXZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x481fc0 start 12f74d end 12f8e1 Offset 352873 Len 194, symbol ?BindToSystemIL@@YGJPAUIAssemblyName@@PBGHPAPAUIAssembly@@PAVCDebugLog@@@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x49c674 start 49c320 end 49c340 Offset 354 Len 20, symbol ??_EScope@detail@logging@fusion@@UAEPAXI@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x49cf7a start b6b3d end b6dcf Offset 3e643d Len 292, symbol ??0StatusScope@logging@fusion@@QAE@KKPAJ@Z, prefixing with ??.
Warning: NOT IN RANGE: address 0x49d230 start b70ff end b73d3 Offset 3e6131 Len 2d4, symbol ??1StatusScope@logging@fusion@@UAE@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x49d297 start b70ff end b73d3 Offset 3e6198 Len 2d4, symbol ??1StatusScope@logging@fusion@@UAE@XZ, prefixing with ??.
Warning: NOT IN RANGE: address 0x49e202 start fa0bd end fa1d5 Offset 3a4145 Len 118, symbol ?Init@CDebugLogElement@@QAEJPBGH@Z, prefixing with ??.
    Addresses to look up       655
        Found Symbols          627
        Distinct Found Symbols 415
        Unmatched Symbols 28
Finished Lookup up symbols for clr Elapsed Time = 271.152
Completed: Symbol Lookup   (Elapsed Time: 271.152 sec)
Started: Computing Stack Traces
Completed: Computing Stack Traces   (Elapsed Time: 0.076 sec)

Make a version of PerfView that works in Data Centers that require all DLLs to be signed

Today PerfView itself is signed, but it unpacks subordinate DLLs that are not signed. This is OK in typical cases, but for locked down data centers, they set OS hooks to make DLL loads fail if they are not signed. This means PerfView can't be used to collect data in DataCenters with this requirement.

The work is to create a build of PerfView in which all subordinate DLLs are also signed.

PerfView doesn't focus the frame focused as specified in a PerfView.xml file

If you save or generate a PerfView.xml file you can set the element to a frame name. I would expect that when this file is opened up, PerfView would automatically focus it expanding any necessary parent frames but it does not. I may fix this next time I work in the PerfView solution, but for now I'll just log the issue. Example xml:

 <TabSelected>CallTreeTab</TabSelected>
  <FocusName>msenv!HandleNewProjectCommand</FocusName>
 </StackWindowGuiState>

Enable the GCStartStopEvents CTF Tests

I have disabled the tests GCStartStopEvents in CtfTraceTests.cs because it asserts in the method

GetTraceEvent(CtfEvent evt)

At this assert.

Debug.Assert(evt.Name.StartsWith("lttng") || _eventMapping.ContainsKey(evt.Name), evt.Name);

If you remove the 'Assert.Inconclusive' and run the test on a debug build it should repo.

Vance

GcStats failure to open on certain traces

I have a trace on my machine that fails to open GcStats, failing with this stack trace:

Started: Opening GCStats
Completed: Opening GCStats   (Elapsed Time: 2.541 sec)
Exception Occurred: System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at Stats.GcStats.PrintCondemnedReasonsToHtml(TraceGC gc) in E:\GitHub\perfview\src\PerfView\GcStats.cs:line 900
   at Stats.GcStats.PrintEventCondemnedReasonsTable(TextWriter writer, TraceProcess stats, TraceLoadedDotNetRuntime runtime, Int32 start, Predicate`1 filter) in E:\GitHub\perfview\src\PerfView\GcStats.cs:line 805
   at Stats.GcStats.ToHtml(TextWriter writer, TraceProcess stats, TraceLoadedDotNetRuntime runtime, String fileName, Boolean doServerGCReport) in E:\GitHub\perfview\src\PerfView\GcStats.cs:line 177
   at Stats.ClrStats.ToHtml(TextWriter writer, List`1 perProc, String fileName, String title, ReportType type, Boolean justBody, Boolean doServerGCReport) in E:\GitHub\perfview\src\PerfView\ClrStats.cs:line 77
   at PerfView.PerfViewGCStats.WriteHtmlBody(TraceLog dataFile, TextWriter writer, String fileName, TextWriter log) in E:\GitHub\perfview\src\PerfView\PerfViewData.cs:line 2045
   at PerfView.PerfViewHtmlReport.<>c__DisplayClass16_0.<Open>b__0() in E:\GitHub\perfview\src\PerfView\PerfViewData.cs:line 952
   at PerfView.StatusBar.<>c__DisplayClass19_0.<StartWork>b__0(Object <state>) in E:\GitHub\perfview\src\PerfView\GuiUtilities\StatusBar\StatusBar.xaml.cs:line 216
An exceptional condition occurred, see log for details.

I've checked this repros on PerfView built from master and doesn't repro on the PerfView currently hosted at \\clrmain\tools\PerfView.exe. I doubt I'm allowed to go posting the trace that I have that causes this to repro but I'd be happy to share it privately. I can take a look at this a little later in the week to see if it's an easy fix.

[Request] nuget package for TraceEvent lib?

As Maoni Stephens just announced, the TraceEvent now includes API that eases performance-related etw trace analysis.

However, the current version of Microsoft.Diagnostics.Tracing.TraceEvent package (1.0.41) does not include it. Any plans for a new release?

ConvertMarkTimes doesn't fix MarkOverflow time

When reading in the mark events in the analysis code (TraceManagedProcess), we initially set the time for each type of marking to the relative timestamp of the ETW event itself (in milliseconds since the start of the trace), and then when we get to the end event for the corresponding GC, we replace those timestamps with the actual amount of time each type of marking took.

We handle this properly for most of the types (handles, FQ, etc.) but we do nothing with the MarkOverflow type, so it still shows the time that the event occurred.

ArgumentOutOfRangeException when opening a valid ETL file

Attached a zipped repro file. One has to unzip it and open it in PerfView.

This is a valid ETW file and WPT or Win32 APIs can successfully read it.

Exception Occurred: System.ArgumentOutOfRangeException: Not a valid Win32 FileTime.
Parameter name: fileTime
at System.DateTime.FromFileTimeUtc(Int64 fileTime)
at Microsoft.Diagnostics.Tracing.ETWTraceEventSource.Initialize(String fileOrSessionName, TraceEventSourceType type)
at Microsoft.Diagnostics.Tracing.TraceEventDispatcher.GetDispatcherFromFileName(String traceFileName)
at Microsoft.Diagnostics.Tracing.Etlx.TraceLog.CreateFromEventTraceLogFile(String filePath, String etlxFilePath, TraceLogOptions options)
at PerfView.ETLPerfViewData.GetTraceLog(TextWriter log, Action`3 onLostEvents)
at PerfView.ETLPerfViewData.OpenImpl(Window parentWindow, StatusBar worker)
at PerfView.PerfViewFile.<>c__DisplayClass13_0.b__0()
at PerfView.StatusBar.<>c__DisplayClass19_0.b__0(Object )

repro.zip

Illegal characters in path when opening Thread Time with StartStop activities

I collected some data with Perfview at Azure VM and tried to open that. CPU stacks are fine, no problem opening. Tried Thread Time (with StartStop Activities) Stacks and nothing happened. Status bar shows "Illegal characters in path".

Log content after click on the stacks:

Started: Opening Thread Time (with StartStop Activities) Stacks
Symbol reader _NT_SYMBOL_PATH= {
    C:\Users\j.user\AppData\Local\Temp\PerfView;
    SRV*C:\Users\J8675~1.USR\AppData\Local\Temp\symbols*http://msdl.microsoft.com/download/symbols;
    }
This can be set using the File -> Set Symbol Path dialog on the Stack Viewer.
Created SymbolReader with SymbolPath C:\Users\j.user\AppData\Local\Temp\PerfView;SRV*C:\Users\J8675~1.USR\AppData\Local\Temp\symbols*http://msdl.microsoft.com/download/symbols
Warning: An activity was started that was not scheduled at 1 746,168  in process w3wp of kind IOThreadPool
...... repeated many times
Warning: An activity was started that was not scheduled at 1 786,695  in process w3wp of kind IOThreadPool
No code addresses are in mscorlib.ni that have not already been looked up.
[Loading symbols for d:\windows\assembly\nativeimages_v4.0.30319_32\mscorlib\d1265d6159ea876f9d63ea4c1361b587\mscorlib.ni.dll]
FindSymbolFilePath: *{ Locating PDB mscorlib.ni.pdb GUID d1265d61-59ea-876f-9d63-ea4c1361b587 Age 1 Version 4.0.30319.34209 built by: FX452RTMGDR
FindSymbolFilePath: Pdb is for DLL d:\windows\assembly\nativeimages_v4.0.30319_32\mscorlib\d1265d6159ea876f9d63ea4c1361b587\mscorlib.ni.dll
FindSymbolFilePath: Probed file location C:\Users\j.user\AppData\Local\Temp\PerfView\mscorlib.ni.pdb does not exist
FindSymbolFilePath: Found in cache C:\Users\J8675~1.USR\AppData\Local\Temp\symbols\mscorlib.ni.pdb\d1265d6159ea876f9d63ea4c1361b5871\mscorlib.ni.pdb
FindSymbolFilePath: *} Successfully found PDB C:\Users\J8675~1.USR\AppData\Local\Temp\symbols\mscorlib.ni.pdb\d1265d6159ea876f9d63ea4c1361b5871\mscorlib.ni.pdb GUID d1265d61-59ea-876f-9d63-ea4c1361b587 Age 1 Version 4.0.30319.34209 built by: FX452RTMGDR
Opening PDB C:\Users\J8675~1.USR\AppData\Local\Temp\symbols\mscorlib.ni.pdb\d1265d6159ea876f9d63ea4c1361b5871\mscorlib.ni.pdb with signature GUID d1265d61-59ea-876f-9d63-ea4c1361b587 Age 1
Opened Pdb file C:\Users\J8675~1.USR\AppData\Local\Temp\symbols\mscorlib.ni.pdb\d1265d6159ea876f9d63ea4c1361b5871\mscorlib.ni.pdb
Loaded, resolving symbols
Warning: NOT IN RANGE: address 0x27b040 start 2c7a54 end 2c7a70 Offset fffb35ec Len 1c, symbol System.GC.ReRegisterForFinalize(System.Object), prefixing with ??.
Warning: NOT IN RANGE: address 0x27b9a0 start 2c7a54 end 2c7a70 Offset fffb3f4c Len 1c, symbol System.GC.ReRegisterForFinalize(System.Object), prefixing with ??.
Warning: NOT IN RANGE: address 0x27ce47 start 2c7a54 end 2c7a70 Offset fffb53f3 Len 1c, symbol System.GC.ReRegisterForFinalize(System.Object), prefixing with ??.
    Addresses to look up       166
        Found Symbols          166
        Distinct Found Symbols 135
        Unmatched Symbols 0
Completed: Opening Thread Time (with StartStop Activities) Stacks   (Elapsed Time: 0,234 sec)
Error: Illegal characters in path.

TraceLogging events are sometimes not decoded by PerfView/TraceEvent properly

More information in my one note under 'Fixing Tracelogging in TraceEvent'

The issue is that the 'Event ID' field of an event is not guaranteed to be an accurate identity for the schema of an event. In the limit, some Tracelogging providers use 0 for the Event ID for all events, which make all schema's collide.

There are a number of solutions, but the most reasonable is likely to be to have a table that maps a TraceLogging event's meta-data to a schema ID. (it is annoyingly inefficient, but arguably there just are not that many Tracelogging events, so it is OK).

It is straightforward work (a day or two).

ALPC stack traces missing?

It seems TraceEventSession.SetStackTraceIds does not set stack traces for ALPC events, even if configured to do so.
Is it just an oversight?

PerfView should run the debugging application as a normal user and not as an elevated (admin) user

Hello

When we run an application with PerfView (clicking on "Run a command", or by the menus "Collect" / "Run" (Alt-R), or by command line "run"), PerfView elevates itself then run the application as elevated too.
That is a security threat, and it prevents debugging Window Store applications (they fail running, see https://social.msdn.microsoft.com/Forums/en-US/41170c0f-405c-45d8-abcd-b7a376c70c48/failure-starting-process-in-perview-with-windows-10-universal-application?forum=wpdevelop).

PerfView, even elevated, should run the application as the normal non-elevated user.

It is obviously feasible as said here:
https://blogs.msdn.microsoft.com/winsdk/2013/06/17/launching-a-process-as-a-normal-user-from-an-elevated-user/
It is even easier in PerfView as when PerfView starts non-elevated, it knows who is the normal user and it can collect the non-elevated token and pass it to the elevated PerfView process.

Thank you.

Tested with PerfView 1.9.0.0

TEST:

  • Run PerView.
  • Alt-R
  • Type-in command to the application.
  • Click on run command.
  • Check in the task manager that the application as been launched with elevated privileges (admin user).

IMPACT:

  • Windows Store applications can not been profiled this way.
  • That is a security threat since the application has admin rights, and usuallly it was not designed for that.
  • The developper can not profile its application as a normal non-elevated user (the behavior of the application can be very different).

Sid data type support discussion

I have created a fork+branch with incomplete Sid data type support at https://github.com/MatthewMWR/perfview/tree/SidTypeSupport_2016-10 with extraction methods, test data covering multiple data layout scenarios, and a unit test.

If it will work for you, the compare URL is https://github.com/Microsoft/perfview/compare/master...MatthewMWR:SidTypeSupport_2016-10?expand=1

Currently this is missing a key element (why I haven't done a PR yet): In Registered/Dynamic parsing context we need to fix up the field lengths for Sid and following fields per-event (like with strings). I have the method to determine the length of the data, but I don't know where to implement the run time offset fixups.

StackViewer - The sort order in the byname tab should remain after making an update

I'm working in a stack viewer where I need to sort by Inc descending. After I find frames that I have analyzed, I remove them and then concentrate on the rest. When I start looking for other frames, I need to click the Inc column to sort by Inc instead of the default (which is Exc). It would be nice if the sort column didn't change between updates.

Add more safe Event Types filter

Make two lists Event types.

  • First All event types
  • Second Displayed Event types
    It's more safe to use such filter, because selection in list box easy to corrupt
    perfview_eventtypefilter

Symbols are prefixed with ?? when it seems they're otherwise fine

I'm looking at some dumps traces symbol names are prefixed with ?? when the symbols appear totally fine. Is there a way to turn this flagging off? I can use {%}!??{*}->$1!$2 as a group pattern to work around it but unfortunately it gets messy if I'm trying to do other group patterns as well.

PerfView cannot parse some ETW events on a different machine other than the collecting machine

Hi,

I am using PerfView to collect and view 'IIS_Trace' ETW (3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83:0xFFFFFFFE:5) events on Windows Server 2012 Datacenter (Build 9200, "win 8" for short in the following text). On the win 8 machine which I collected the etl file, PerfView can view the IIS_Trace events correctly. While on Win 10, PerfView cannot parse those ETW events from the same etl file, their provider ID cannot be parsed. I also tried to open the same ETL file on another win 8 machine, those events cannot be parsed also.

On Win 8, the events can be parsed correctly:
image

On Win 10, the events cannot be parsed:
image

On another Win 8 machine, the events cannot be parsed:
image

Tested with Version 1.9.00 and 1.9.49. I also tried WPA, the same issue persisted.

The etl file:
PerfViewData2.etl.zip

Thanks!

Suggestion: Split up TraceLog.cs and TraceEvent.cs into separate files

TraceLog.cs is over 9,000 lines and TraceEvent.cs is over 4,000.
When editing in this large file, Visual Studio lags somewhat making the experience a little cumbersome.

Do you have any objection to splitting these files so that we have 1 file per class? That would create ~19 new files for TraceEvent.cs and ~35 new files for TraceLog.cs (more if nested classes were split into partials).

CS0436 warnings from Zip library's copy of "Contract.cs"

Building the Zip library results in a bunch of warnings indicating that "Contract" is multiply defined (in both mscorlib and locally).
Why do we include a private, dummy copy of "Contract.cs" in this project?
Is there a desire to run on frameworks that don't have System.Diagnostics.Contract?
If not, it looks like it would be safe to delete that file.

Failed to run PerfView to collect ETW in windows container

Repro

  1. Follow https://docs.microsoft.com/en-us/dotnet/articles/framework/docker/aspnetmvc to set up a windows container in WS2016 + IIS + ASP.NET
  2. Launch a cmd in a new interactive session (eg, docker exec -it cmd)
  3. Download PerfView if it's not the container.
  4. Run "PerfView collect /NoGui /MaxCollectSec:30 /LogFile:log.txt /AcceptEULA"

Error attached at the end. I'm not sure if it's currently a windows container restriction that blocks the kernel session. I haven't found any public document about it. Report the issue to track.

It worked if I collected only APS.NET events using "PerfView collect /NoGui /MaxCollectSec:30 /LogFile:log.txt /AcceptEULA /OnlyProviders:*Microsoft-Windows-ASPNET".

[EXECUTING: PerfView collect /NoGui /MaxCollectSec:30 /LogFile:log.txt /AcceptEULA]
Circular buffer size = 0, setting to 500.
[Kernel Log: C:\tools\PerfViewData.kernel.etl]
Kernel keywords enabled: Default
Aborting tracing for sessions 'NT Kernel Logger' and 'PerfViewSession'.
Insuring .NET Allocation profiler not installed.
[Exception Occurred: System.ArgumentException: Value does not fall within the expected range.
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at Microsoft.Diagnostics.Tracing.Session.TraceEventSession.EnableKernelProvider(Keywords flags, Keywords stackCapture)
at PerfView.CommandProcessor.Start(CommandLineArgs parsedArgs)
at PerfView.CommandProcessor.Collect(CommandLineArgs parsedArgs)
at PerfView.CommandProcessor.ExecuteCommand(CommandLineArgs parsedArgs)]

Make the caching check for PerfView's ETLX, more robust to 'copy on top' scenarios'.

The way PerfView works is it converts the ETL.ZIP file to an ELTX file then does all the work on the ETLX file. Thus it is important that if the ETL.ZIP file is updated, that the ETLX file get updated as well.

Today there is a timestamp check that just checks that the ETLX file is newer than the ETL.ZIP file, and skips regeneration if the ETLX file is new. . (see IsUpToDate method in PerfViewFile in PerfViewData.cs).

The problem that people can copy an OLD ETL.ZIP file on top of a existing ETL.ZIP file and fool this logic (it 'LOOKs' like the ETLX file is up to date, but it is not). This scenarios really happens (although it is rare) To fix this

Make sure that the ETLX file has the file timestamp (and maybe size) of the file it was generated from inside it. Check this when opening and regenerate if it does not match. This will fix this problem.

Add support for symbols collected from DiagnosticsHub

The DiagnosticsHub (VS StandardCollectorService) creates ".diagsession" files which are readable in Visual Studio and PerfView.
They are basically ".etl.zip" files, but they contain a "metadata.xml" (manifest) file cataloging their contents. PerfView is already able to locate the contained ETL file, but it fails to find any adjacent symbols. A typical .diagsession file looks like:

[Content_Types].xml
metadata.xml
0DFD569B-0A7A-4C7C-ABA5-3756C58FE89E
    A8BC4FD5-9DF3-48AD-8631-B73054BAEED7.m.etl
194BAE98-C4ED-470E-9204-1F9389FC9DC1
   SymCache
        abc.pdb
        def.pdb
        etc.

The metadata file contents look like this:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="urn:diagnosticshub-package-metadata-2-1">
  <Tools>
    <Tool Id="{96F1F3E8-F762-4CD2-8ED9-68EC25C2C722}"/>
  </Tools>
  <Content>
    <Resource Id="{0DFD569B-0A7A-4C7C-ABA5-3756C58FE89E}" Type="DiagnosticsHub.Resource.EtlFile" TimeAddedUTC="131001205138170116" ResourcePackageUriPrefix="0DFD569B-0A7A-4C7C-ABA5-3756C58FE89E" Name="A8BC4FD5-9DF3-48AD-8631-B73054BAEED7.m.etl" IsDirectoryOnDisk="false" CompressionOption="norm"/>
    <Resource Id="{194BAE98-C4ED-470E-9204-1F9389FC9DC1}" Type="DiagnosticsHub.Resource.SymbolCache" TimeAddedUTC="131001205138170116" ResourcePackageUriPrefix="194BAE98-C4ED-470E-9204-1F9389FC9DC1" Name="SymCache" IsDirectoryOnDisk="true" CompressionOption="norm"/>
  </Content>
  <Metadata/>
</Package>

We can presumably fix this either by searching sibling folders or by actually parsing the metadata.

PerfView Throws For Linux Traces if LTTng Events are Not Present

When a Linux trace does not contain any LTTng events, PerfView will throw an exception:

            var firstChannel = (new ChannelList(_channels)).FirstOrDefault();
            if (firstChannel == null)
                throw new EndOfStreamException("No CTF Information found in ZIP file.");

Expected: Don't show views that are powered by LTTng events.

ForceGC throws errors: "The GUID passed was not recognized as valid by a WMI data provider. (Exception from HRESULT: 0x80071068)"

I was trying to use PerfView to force GC on a process as suggested by http://stackoverflow.com/a/26033289/1837339, however, it seems not working and I got an error like this:

Loading the ETWClrProfiler.
Turning on debug privilege.
Highest Runtime in process is version v4.0.30319
  0.0s: Trying to attach a profiler.
  0.0s: Done Attaching ETLClrProfiler ret = 0
Attached ETWClrProfiler.
  0.1s: Enabling JScript Heap Provider
  0.1s: Enabling EtwClrProfiler
  0.1s: Enabling CLR GC events
  0.1s: Requesting a JScript GC
  0.1s: Requesting a DotNet GC
  0.1s: Requesting .NET Native GC
HeapDump Error: System.Runtime.InteropServices.COMException (0x80071068): The GUID passed was not recognized as valid by a WMI data provider. (Exception from HRESULT: 0x80071068)
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at Microsoft.Diagnostics.Tracing.Session.TraceEventSession.CaptureState(Guid providerGuid, UInt64 matchAnyKeywords, Int32 filterType, Object data)
   at GCHeapDumper.TriggerAllGCs(TraceEventSession session, Stopwatch sw, Int32 processID)
   at GCHeapDumper.ForceGC(Int32 processID)
   at Program.MainWorker(String[] args)

Any idea what could be causing the issue? Thanks.

Q: Loading symbols issues

This is not directly related to perfview, but might be useful to have some more info about it..

I have problems loading symbols on one of my machines.
The log looks like this:

Started: Symbol Lookup

***************************************************************************
[Looking up symbols for clr]
Symbol reader _NT_SYMBOL_PATH= {
    c:\tools\perfview;
    SRV*D:\Users\xxx~1\AppData\Local\Temp\2\symbols*http://msdl.microsoft.com/download/symbols;
    }
This can be set using the File -> Set Symbol Path dialog on the Stack Viewer.
Created SymbolReader with SymbolPath c:\tools\perfview;SRV*D:\Users\XXX~1\AppData\Local\Temp\2\symbols*http://msdl.microsoft.com/download/symbols
[Loading symbols for d:\windows\microsoft.net\framework64\v4.0.30319\clr.dll]
FindSymbolFilePath: *{ Locating PDB clr.pdb GUID e3e0c76a-7909-454f-b3c5-6b0c2ce5ffeb Age 2 Version 4.0.30319.34209 built by: FX452RTMGDR
FindSymbolFilePath: Pdb is for DLL d:\windows\microsoft.net\framework64\v4.0.30319\clr.dll
FindSymbolFilePath: Checking relative to DLL path d:\windows\microsoft.net\framework64\v4.0.30319\clr.dll
FindSymbolFilePath: Probed file location d:\windows\microsoft.net\framework64\v4.0.30319\clr.pdb does not exist
FindSymbolFilePath: Probed file location d:\windows\microsoft.net\framework64\v4.0.30319\symbols.pri\retail\dll\clr.pdb does not exist
FindSymbolFilePath: Probed file location d:\windows\microsoft.net\framework64\v4.0.30319\symbols\retail\dll\clr.pdb does not exist
FindSymbolFilePath: Probed file location c:\tools\perfview\clr.pdb does not exist
FindSymbolFilePath: Searching Symbol Server http://msdl.microsoft.com/download/symbols.

FindSymbolFilePath: Waiting for initial connection to http://msdl.microsoft.com/download/symbols/clr.pdb\E3E0C76A7909454FB3C56B0C2CE5FFEB2\clr.pdb.
FindSymbolFilePath: Time 10.7954041 sec.  Timeout of 10 seconds exceeded for http://msdl.microsoft.com/download/symbols.  Setting as dead server
FindSymbolFilePath: Skipping server http://msdl.microsoft.com/download/symbols because it was unreachable in the past, will try again in 5 min.
FindSymbolFilePath: Skipping server http://msdl.microsoft.com/download/symbols because it was unreachable in the past, will try again in 5 min.
Trying the XX/XXYYY.PDB convention
FindSymbolFilePath: Searching Symbol Server http://msdl.microsoft.com/download/symbols.
FindSymbolFilePath: Skipping server http://msdl.microsoft.com/download/symbols because it was unreachable in the past, will try again in 5 min.
FindSymbolFilePath: Skipping server http://msdl.microsoft.com/download/symbols because it was unreachable in the past, will try again in 5 min.
FindSymbolFilePath: Skipping server http://msdl.microsoft.com/download/symbols because it was unreachable in the past, will try again in 5 min.
FindSymbolFilePath: *} Failed to find PDB clr.pdb GUID e3e0c76a-7909-454f-b3c5-6b0c2ce5ffeb Age 2 Version 4.0.30319.34209 built by: FX452RTMGDR
Data collected on current machine, looking up PDB by inspecting information in EXE.
FindSymbolFilePathForModule: searching for PDB for DLL d:\windows\microsoft.net\framework64\v4.0.30319\clr.dll.
FindSymbolFilePathForModule returns NULL
Failed to to find PDB for d:\windows\microsoft.net\framework64\v4.0.30319\clr.dll
Could not find PDB file.
Finished Lookup up symbols for clr Elapsed Time = 10.860
Completed: Symbol Lookup   (Elapsed Time: 10.860 sec)
Started: Computing Stack Traces
Completed: Computing Stack Traces   (Elapsed Time: 0.305 sec)

I tried to load symbols on my machine where clr version is 4.6.1055.0 and it worked fine. Clr version at Azure VM is 4.5.2 (4.0.30319.34209). Is there any backup server for symbols or any other way how to resolve them correctly? It's not only clr, but also ntdll etc.

Thank you.

TraceEvent to implement ITraceEvent

Can we get TraceEvent to implement an interface?
It would make testing code that relies on the TraceEvent library (and TraceEvent class) so much easier.

Also, is the nuget for TraceEvent still being updated?

Perfview dump size doesn't match the real dump size.

I have a managed memory dump with 15 GB. When I open this dump with Perfview (despite I select 1 Billion objects) , and include unreachable memory, it totals around 12 GB. Within WinDBG if I run !eeheap -gc I can see managed heap size is 15 gigs in deed. Why this difference is happening ? Is it possible to get a perfect snapshot of the heap from an existing dump by using perfview ?

Stack view: Sort by maximum metric

I suggest to add the ability to sort by the maximum metric found in any of the stacks concerened.

There is already an average and a sum, including percentages, so I presume this request is in accordance with the guidelines.

I am analyzing a sort of "non-cumulative" metric, blocked time per occurrence. Since the total is heavily influenced by what the user actually did and how often, I cannot really use that. The average works in general, but hides the biggest problems. The maxium, in my case, is the user's worst observed case which is what I'm out for.

Format Exception when opening the CPU view on on a Linux Trace.

To Repro

Download https://github.com/deppe/XmlSerializerPerf/blob/master/xmlperf.trace.zip

Open PerfView on it,

Open CPU view.

From the Log we get

Completed: Opening CPU Stacks (Elapsed Time: 6.138 sec)
Exception Occurred: System.AggregateException: One or more errors occurred. ---> System.FormatException: Input string was not in a correct format.
at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
at Diagnostics.Tracing.StackSources.LinuxPerfScriptEventParser.d__29.MoveNext() in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptEventParser.cs:line 326
at Diagnostics.Tracing.StackSources.LinuxPerfScriptEventParser.d__9.MoveNext() in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptEventParser.cs:line 85
at Diagnostics.Tracing.StackSources.ParallelLinuxPerfScriptStackSource.<>c__DisplayClass1_0.b__0(Object givenArrayIndex) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 63
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.WaitAll(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
at Diagnostics.Tracing.StackSources.ParallelLinuxPerfScriptStackSource.DoInterning() in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 80
at Diagnostics.Tracing.StackSources.LinuxPerfScriptStackSource.InternAllLinuxEvents(Stream stream) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 351
at Diagnostics.Tracing.StackSources.LinuxPerfScriptStackSource..ctor(String path, Boolean doThreadTime) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 266
at Diagnostics.Tracing.StackSources.ParallelLinuxPerfScriptStackSource..ctor(String path, Boolean doThreadTime) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 20
at PerfView.LinuxPerfViewData.OpenStackSourceImpl(String streamName, TextWriter log, Double startRelativeMSec, Double endRelativeMSec, Predicate1 predicate) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\PerfViewData.cs:line 6078 at PerfView.PerfViewStackSource.OpenStackSource(String streamName, TextWriter log, Double startRelativeMSec, Double endRelativeMSec, Predicate1 predicate) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\PerfViewData.cs:line 2381
at PerfView.PerfViewStackSource.<>c__DisplayClass23_0.b__0() in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\PerfViewData.cs:line 2399
at PerfView.StatusBar.<>c__DisplayClass19_0.b__0(Object ) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\GuiUtilities\StatusBar\StatusBar.xaml.cs:line 216
---> (Inner Exception #0) System.FormatException: Input string was not in a correct format.
at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
at Diagnostics.Tracing.StackSources.LinuxPerfScriptEventParser.d__29.MoveNext() in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptEventParser.cs:line 326
at Diagnostics.Tracing.StackSources.LinuxPerfScriptEventParser.d__9.MoveNext() in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptEventParser.cs:line 85
at Diagnostics.Tracing.StackSources.ParallelLinuxPerfScriptStackSource.<>c__DisplayClass1_0.b__0(Object givenArrayIndex) in C:\Users\Vancem\Source\Repos\perfview\src\PerfView\OtherSources\Linux\LinuxPerfScriptStackSource.cs:line 63
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()<---

"A CLR Profiler has already been attached" after few run with ForceGC

I used "HeapDump /ForceGC" directly to trigger GC on some process periodically. However I noticed that after it runs few times it start to throw errors like this:
"A CLR Profiler has already been attached. You cannot attach another. (a process restart will fix)"

The problem is that I need keep the process running, e.g. w3wp process from iis. Is there anyway to find out why the profiler is still attached and how to detach it if possible?

PerfView cannot open ".diagsession" file on win 8 machine

Hi,

I collected diagsession files on on Windows Server 2012 Datacenter (Build 9200, "win 8" for short in the following text) machine using the VSStandardCollector service. The file can be opened by PerfView on win 10 machines. (although not all the events are parsed correctly. This is mentioned in another issue.) However, the file cannot be opened on Win 8 machine. Logs indicate the file is loaded, but the corresponding etl file is not showing up in the main window:

image

Tested with Version 1.9.00 and 1.9.49.

Thanks!

The diagsession file:

sample_diagsession_file.zip

The log:

Started with command line: "D:\Users\webworkeradmin\Desktop\PerfView2\PerfView.exe"
PerfView Version: 1.9.49 BuildDate: Fri 01/06/2017 11:58:23.98
Started: View
Warning: PdbScope not found at D:\Users\webworkeradmin\Desktop\PerfView2\PerfViewExtensions\PdbScope.exe
Disabling the Image Size Menu Item.
Warning: ILSize not found at D:\Users\webworkeradmin\Desktop\PerfView2\PerfViewExtensions\ILSize.dll
Disabling the IL Size Menu Item.
Completed: View (Elapsed Time: 0.067 sec)
Started: Opening iistest0200.diagsession
Opening diagnostics session file iistest0200.diagsession
Found 'e314b2e5-f3b8-4252-ba75-f59c7c7bf1c8' resource '0797E42F-003D-4F91-A845-6404CF289E84.m.etl'. Loading ...
Loaded 0797E42F-003D-4F91-A845-6404CF289E84.m.etl. Loading ...
Completed: Opening iistest0200.diagsession (Elapsed Time: 0.109 sec)

Significant rounding errors occur in the Stack Window for "large" StackSources

If you open this stack viewer, it shows a metric of 91million, but if you change all of the floats to doubles it shows 97million. \vspfs3\public\daklimek\devenvCopy.codeSizecallTree.perfView.xml

internal double m_inclusiveMetric;
internal double m_inclusiveCount;
internal double m_exclusiveMetric;
internal double m_exclusiveCount;
internal double m_exclusiveFoldedMetric;
internal double m_exclusiveFoldedCount;

Ideally, we would do the summation using doubles instead of floats but keep them stored as floats to save memory.

Do you want more Computers?

Over the years I've built up a library (wraps TraceEvent) that derives various domain specific facts about a trace. For example: Group Policy ran for user session x with parameters y and took duration z, etc. More recently I noticed that TraceEvent has a similar concept in the form of Computers (e.g. TcpIpComputer, TraceProcess, et al).

I'm wondering in the future whether to keep writing such things external to TraceEvent, or if it makes more sense to integrate with TraceEvents's Computers layer. Do you want TraceEvent's set of Computers to grow-- or were they just meant to be an internal enablers for specific parser/perfview scenarios? Are the facts (created by Computers) intended for broad consumption by callers?

[Request] Make is possible to work with captured stack traces

In some (admittedly particular) circumstances, it can be very beneficial to log stack traces captured by custom diagnosis routines. There even is an msdn example:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn904628%28v=vs.85%29.aspx

That is, the final event contains a string attribute with the trace as seen by .net. If perfview would allow to analyze using such custom traces instead of, or in addition to the system-provided ETW traces that would be very helpful.

Update perfview on download center

Using the one of download center which is from July I hit some failure loading symbols. Cloning and building the latest fixed the problem. @safern hit the same issue. It would be nice to update the one on download center.

Overweight report is not longer working

Repro steps:

  1. Open one stack window (e.g. CPU stacks)
  2. Open another stack window
  3. Regression | With Baseline

Expected: The overweight report is generated.
Actual: It is not and an error message pops up (e.g. Error: Could not find file 'OverweightAnalysis.05-23.14.11.10.534'.).

TraceEvent parsing tests fail with DirectoryNotFoundException on fresh install of W10 and VS2015

On a fresh install of W10 + Visual Studio 2015 + clone of Perfview, the ETW_GeneralParsing_Basic() TestMethod bombs out before doing any work.

UnzippedDataDir (initially @"....\inputs") resolves to an invalid path at line 31 at Directory.EnumerateFiles(TestDataDir, "*.etl.zip") . Perhaps something special about the authors' build environment made this work. On both of my machines the invalid path at run time is \PerfView\src\PerfView\TestResults\inputs. I suspect the intention was for this to resolve to \PerfView\src\TraceEvent\TraceEvent.Tests\inputs.

I can work around by changing the paths (locally) in GeneralParsing, but I don't plan to PR that change as I don't know the back story, intentions, and potential dependencies here.

Use InternTable<T> for FrameInfo in stacks.cs

During PR #68 we discovered that we couldn't use an optimized InternTable for frames because of the need to support update.

Vance said:

Certainly UpdateTaskMarkerFrame and UpdateFrameName are sore thumbs. It would be nice if we can have FrameIntern work like the others.

It occurs to me that we could do this by

  1. Having a special dictionary in ActivityComputer that is only used for 'Starting Task' nodes and supports that finds the 'canonical' frame.
  2. Have the FrameInterner support update, but along the lines you expected originally (it is not responsible for mapping all possible names to the canonical name).

This would allow FrameInterner to work as you wanted and benefit from the improved interner. It also tends to isolate the hack more (it does not leak quite as much).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.