Visual Studio 2013 Diagnostics Investments

Visual Studio 2013 Diagnostics Investments

Rate This
  • Comments 10

this post, and the posts it links to have been updated for VS 2013 RTM - enjoy!

Hi, I am Daniel Moth, a Program Manager in Visual Studio. I don’t know about you, but I usually spend more time (and more fun time in fact!) in the debugger than I do in actually constructing my app. Perhaps that is the reason I also work on the Visual Studio Diagnostics team, which is responsible for the debugger, the profiling tools, code analysis/metrics, and IntelliTrace.

On all the teams I have worked on in my career across a number of companies, the developer on the team that every other member of the team looks up to, is the person who is a wizard in root causing hard to find issues. Beyond having that natural diagnostic talent and also typically more professional experience, the other characteristic of a diagnostic wizard is deep knowledge of the diagnostic tools. It never ceases to amaze me how many developers spend time learning new APIs, but do not invest time in learning what is new on the diagnostic tooling front. Of course you dear reader are reading this post, so that puts you immediately in the other camp of developers who do want to advance their knowledge on the diagnostic tooling front, and I am here to help you with pointers in this blog post. Specifically, I will share with you links to other blog posts and videos on new diagnostics features in Visual Studio 2013.

So you need only bookmark this blog post and come back to it as an index to all the other places that describe in more detail each new capability.

New diagnostics features and their blog posts

Without further ado, here is the list of my favorite diagnostics features in Visual Studio 2013 and be sure to follow the links to the detailed descriptions some of which include screenshots, walkthroughs, etc

  • .NET memory dump analysis: For those of you trying to investigate memory issues on your production servers, you will love our new support for analyzing .NET memory dumps.
  • Async Debugging: You can see how you landed in an async continuation through the enhanced Call Stack window, and also all async operations that are in flight through the Tasks window. We have a dedicated channel9 video recording focused on async debugging. This support is there for C++, JavaScript, and .NET languages. While it requires that you install VS2013 on Windows 8.1, it works across all project/app types from Windows Store apps, to desktop/server apps, to ASP.NET web apps.
  • Just My Code for C++: .NET developers have been enjoying in the debugger the JMC feature for a long time. JMC hides code that is not classified as code that you wrote, allowing you to focus on debugging just your code. You can still show external code through a right click on the Call Stack window. To learn how C++ developers can also enjoy this Just My Code power please read the blog post describing JMC support for C++.
  • Just My Code for JavaScript:  Same preamble as the bullet above :-). To learn how JavaScript developers can also enjoy this Just My Code power please read the blog post describing JMC support for JavaScript.
  • JavaScript and C++ interop debugging: Interop debugging (aka mixed or hybrid) between more than one language is a capability you have been enjoying in Visual Studio for your C++ and .NET code, and now you can enjoy interop debugging between your Native and JavaScript code.
  • Support for 64-bit Edit and Continue for .NET: A top customer request for a long time, we are finally able to deliver this to you as announced in the dedicated blog post on 64-bit EnC support.
  • Return Values in the Autos window for .NET apps: Also a top customer ask, and a feature that brings parity with the C++ experience, learn how you can now see function return values in the Autos window.
  • Enhancements to Code Analysis: .NET and C++ developers can now enjoy better filtering, sorting, and categorization in the Static Code Analysis window.
  • Better error reporting for WinRT C++ apps: If you are building Windows Store apps in C++, you will appreciate the improved WinRT exception reporting.
  • Improvements to natvis for C++ code: C++ developers should also be happier with more customization options for native visualization files.
  • Deeper profiling insight into compiler optimizations for C++ developers: If you are a C++ developer you definitely want to read this deep dive walkthrough on how to get insight into what functions got inlined and other effects of the Profile Guide Optimization (PGO) process through the CPU Sampling profiler.
  • “No refresh” attach for JavaScript: No blog post on this, suffice to say that you can now attach the debugger to running JavaScript code and debug away without having to first enable the script debugger! Behind the scenes, the Visual Studio debugger puts the JavaScript runtime into interpreted mode, which allows it to be attached.
  • C++ AMP GPU debugging improvements: C++ AMP developers programming the GPU enjoyed a superb GPU debugging experience with VS2012 on Windows 8, and with VS2013 they can now enjoy that side by side with CPU debugging, and it is also supported on Windows 7.
  • Search support in the Modules window: Like the blog post says "sometimes for some people it is the little things that please" so if that describes you then go ahead and read about this small Modules window enhancement.
  • Open dumps taken by Task Manager regardless of bitness: If you ever been frustrated when trying to open a dump of your 32bit app that a customer took on a 64bit machine (e.g. through the Task Manager), you'll be pleased to know that you can now actually open 64-bit Dumps of 32-bit Processes in Visual Studio 2013.

Special mention: Performance and Diagnostics hub

Beyond the list above, I feel an extra special mention is needed for an investment we have made across multiple Visual Studio teams to bring you the truly awesome Performance and Diagnostics hub (watch the channel9 overview video). I strongly encourage you to first read the overview post and then the dedicated blog posts to each new (and not so new) tool in the hub:

//build/ talks

Beyond the links to blog posts above (and the two channel9 videos), you may also want to see in action some of these capabilities at the recorded sessions at Build. Here are the sessions I recommend you watch for that purpose:

In Closing

Phew! That was a lot of links to a lot of new diagnostics features in VS2013, which remember came only a year after VS2012 itself also representing a significant investment for tooling the brand new platform for Windows Store apps from a diagnostic perspective.

If you have feedback for any of these I strongly encourage you to leave a comment on one of the links I shared above where their respective authors can respond to you, or you can engage in our MSDN diagnostics forum, and we are always monitoring uservoice. Until next time…

Leave a Comment
  • Please add 8 and 1 and type the answer here:
  • Post
  • Getting error in visual studio 2012 "Unable to automatically step into the server. attaching to the server process failed . visual studio has insufficient privileges to debug this process. To debug this process, visual studio must be run as an administrator" using windows 7. kindly help to resolve this issue without providing admin rights

  • The ability to take a memory heap snapshot in time in your code and dump the difference between it and the current time would help.  We've built this into our C++ applications to take a memory snapshot before doing a large amount of work and then after returning from the large amount of work where the code doing the work should clean up its objects.

  • @Ralph

    Thanks for the comment, this is possible in .NET applications as well.  See this msdn forum thread which contains the sample code for how to do this social.msdn.microsoft.com/.../the-simplest-way-to-generate-minidump-for-mixed-managed-unmanaged-stack.

    You'll just need to pass MINIDUMP_TYPE.MiniDumpWithFullMemory to MiniDumpWriteDump() instead of MINIDUMP_TYPE.MiniDumpNormal which is used in the example.

  • I am very pleased to see that Microsoft is providing so much support for improving diagnostic capabilities. Diagnostic tools greatly help developers to produce high quality code.

  • Pleased with the new environment of VS2013, color grey is low visibility, but adapting in almost all ways.  Found wild impact with new toolbar and wireless connection.  May have been Java toolbar issue.  Design builds underway, and fairly robust.  Have undertaken toolbar build for protein inquiry to follow hand data entry results of good quality ..specific to multidrug resistance interchange in species.. Paper ready for interested parties and tool bar design at mmcgary@visualstudioc.

    Mark M.happy to visit debug info first as fairly newbe to serious code  regards. m.

  • Eagerly waiting for the new version.

    wisentechnologies.com/.../.net-training.aspx

  •  it is so much intresting and this code is very useful for coders to frame .

    www.maasmind.com/java-training.htm

  • Hello,

    I need help on debugging with visual studio 2013. I've got professional VS2013 in my win7 64-bit machine.

    I generated two executables: exec1.exe and exec2.exe for example.

    My perl file invokes exec1.exe and exec1.exe invokes exec2.exe

    perl file -> exec1.exe -> exec2.exe

    Now, while running perl file some time later exec1.exe closes without any traces. As both of these executables are placed in some specific location in my project, I want to debug these files using visual studio debugger. Is there a way to debug these files using Visual studio?

    If yes, please help me and post here.

    Thanks & Regards,

    Pankaj

  • @Pankaj,

    Unfortunately there is not a completely automatic way to do this in Visual Studio.  The easiest way is to open your .exe's as projects (msdn.microsoft.com/.../0bxe8ytt.aspx) and change the "Attach" property to yes.  Then at the beginning of your executable add logic like the following (syntax will vary depending on if you are doing C++ or .NET--the following is C++) "#ifdef _DEBUG while (!IsDebuggerPresent()) Sleep(100); #endif" then when your .exe is launched, start debugging on the Executable project and it will automatically attach.

    If this does not meet your needs, or are you interested in writing a Visual Studio plugin to automatically accomplish this for you, please follow up with us on the diagnostics forum social.msdn.microsoft.com/.../threads

  • Wonderful blog & good post.Its really helpful for me, awaiting for more new post. Keep Blogging!

    www.dotnettrainingchennai.net

Page 1 of 1 (10 items)