lvweiwolf / graphical-debugging

GraphicalDebugging extension for Visual Studio

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Graphical Debugging extension for Visual Studio 2013, 2015 and 2017

This extension allows to display graphical representation of variables during debugging.

Graphical Debugging

Currently it supports Boost.Geometry and Boost.Polygon models, Boost.Variant, STL/Boost containers of values and points as well as C-style arrays. The extension has the following components:

  • Debugger visualizers for Boost.Array, Boost.Container, Boost.Geometry, Boost.MPL, Boost.Polygon, Boost.Tuple and Boost.Variant
  • Geometry Watch tool window displaying geometries in a common coordinate system, e.g. Boost.Geometry or Boost.Polygon polygons
  • Graphical Watch tool window displaying graphical representation of variables, e.g. Boost.Geometry models or vectors of values
  • Plot Watch tool window displaying plot representation of variables, e.g. vector of doubles

Feel free to report bugs, propose features and create pull requests. Any help is appreciated.

Download

You can download this extension from Visual Studio Gallery.

Contact

You may contact me at Boost.Geometry mailing list.

Instructions
Build

You need Microsoft Visual Studio 2015 Update 3, .NET Framework 4.5.2 and Visual Studio 2015 SDK.

Install

To install after building double-click the *.vsix file from bin/Debug or bin/Relase directory.

This extension works with Visual Studio 2013, 2015 and 2017.

Use
  1. place a breakpoint somewhere in the code
  2. start debugging
  3. after a breakpoint hit enable the tool window from the menu
    • View->Other Windows->Geometry Watch
    • View->Other Windows->Graphical Watch
    • View->Other Windows->Plot Watch
  4. write the name of a variable in an edit box on the list

Details

Debugger visualizers

Supported:

  • Boost.Array: array
  • Boost.Container: vector, static_vector
  • Boost.Geometry:
    • de9im: mask, matrix, static_mask
    • detail: turn_info, traversal_turn_info, turn_operation, turn_operation_linear, traversal_turn_operation, segment_ratio
    • index: rtree, varray
    • model: point, point_xy, box, segment, referring_segment, polygon, multi_point, multi_linestring, multi_polygon, nsphere
  • Boost.MPL: int_, size_t, integral_c, vector, vector_c
  • Boost.Polygon: point_data, interval_data, segment_data, rectangle_data, polygon_data, polygon_with_holes_data
  • Boost.Tuple: tuple, cons
  • Boost.Variant: variant

Watch

Geometry Watch

Watch window displaying graphical representation of variables in a single image. This allows to compare the variables easily.

Supported:

  • Containers of points
    • C-style array
    • Pointer to elements with size specifier e.g.: ptr,5
    • STL: array, vector, deque, list
    • Boost.Array: array
    • Boost.Container: vector, static_vector
  • 2D cartesian geometries
    • Boost.Geometry: point, point_xy, box, segment, referring_segment, polygon, multi_point, multi_linestring, multi_polygon, nsphere
    • Boost.Polygon: point_data, segment_data, rectangle_data, polygon_data, polygon_with_holes_data
    • STL: pair
  • Non-cartesian geometries (spherical_equatorial and geographic)
    • Boost.Geometry: point, box, segment, referring_segment, polygon, multi_point, multi_linestring, multi_polygon, nsphere
  • Complex numbers
    • STL: complex
  • Variants of geometries
    • Boost.Variant: variant

Geometry Watch

Geometries in spherical_equatorial and geographic coordinate systems are displayed in a way allowing to see what coordinates were used to define a geometry. Note that various libraries may require coordinates in a certain range. This extension tries to display any coordinates as good as possible.

Segments may be densified in order to reflect the curvature of the globe. This behavior is enabled by default but can be disabled in Tools->Options->Graphical Debugging->Geometry Watch.

Geometry Watch Spherical

where

polygon_sd_t poly_sd{{{-100, 0},{100, 0},{100, 50},{-100, 50},{-100, 0}},
                     {{-150, 10},{-150, 20},{150, 20},{150, 10},{-150, 10}}};
multi_polygon_sd_t mpoly_sd{{{{0, 0},{90, 10},{170, 20},{-170, 30},{-150, 60}},
                             {{0, 10},{-15, 20},{-50, 50},{0, 60}}}};
multi_point_sd_t mpt_sd{{0, 0},{90, 10},{170, 20},{-170, 30}};
Graphical Watch

Watch window displaying graphical representations of variables in a list. Each variable is placed and visualized in a separate row.

Supported:

  • Containers of elements convertible to double and containers of points
    • C-style array
    • Pointer to elements with size specifier e.g.: ptr,5
    • STL: array, vector, deque, list
    • Boost.Array: array
    • Boost.Container: vector, static_vector
  • 2D cartesian geometries
    • Boost.Geometry: point, point_xy, box, segment, referring_segment, polygon, multi_point, multi_linestring, multi_polygon, nsphere
    • Boost.Polygon: point_data, segment_data, rectangle_data, polygon_data, polygon_with_holes_data
    • STL: pair
  • Non-cartesian geometries (spherical_equatorial and geographic)
    • Boost.Geometry: point, box, segment, referring_segment, polygon, multi_point, multi_linestring, multi_polygon, nsphere
  • Complex numbers
    • STL: complex
  • Variants of geometries
    • Boost.Variant: variant

Graphical Watch

Geometries in spherical_equatorial and geographic coordinate systems are displayed in a convenient, compact way.

Segments may be densified in order to reflect the curvature of the globe. This behavior is enabled by default but can be disabled in Tools->Options->Graphical Debugging->Graphical Watch.

Graphical Watch Spherical

where

polygon_sd_t poly_sd{{{-100, 0},{100, 0},{100, 50},{-100, 50},{-100, 0}},
                     {{-150, 10},{-150, 20},{150, 20},{150, 10},{-150, 10}}};
multi_polygon_sd_t mpoly_sd{{{{0, 0},{90, 10},{170, 20},{-170, 30},{-150, 60}},
                             {{0, 10},{-15, 20},{-50, 50},{0, 60}}}};
multi_point_sd_t mpt_sd{{0, 0},{90, 10},{170, 20},{-170, 30}};
Plot Watch

Watch window displaying plot representation of variables in a single image. Type of plot can be set in Options.

Supported containers of values convertible to double and containers of points:

  • C-style array
  • Pointer to elements with size specifier e.g.: ptr,5
  • STL: array, vector, deque, list
  • Boost.Array: array
  • Boost.Container: vector, static_vector

where points can be of any supported point type (coordinate system is ignored):

  • STL: complex, pair
  • Boost.Geometry: point, point_xy
  • Boost.Polygon: point_data

Plot Watch

Zooming/cropping

Geometry Watch and Plot Watch has zooming/cropping feature.

Geometry Watch Zoom

Geometry Watch Zoomed

Options

Options for each Watch can be found under Tools->Options->Graphical Debugging

Plot Watch Various

Direct memory access

The extension attempts to obtain data through direct memory access if possible. From this feature benefit all supported containers of fundamental numeric types and geometries using such coordinate types. E.g.:

  • int arr[5]
  • std::array<float, 5>
  • std::vector<double>
  • std::deque<std::pair<float> >
  • std::list<std::complex<double> >
  • boost::container::vector<int>
  • boost::geometry::model::linestring< boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian> >
  • boost::polygon::polygon_data<int>
  • etc.

This behavior is enabled by default but can be disabled in options under Tools->Options->Graphical Debugging->General

Themes

The extension supports Visual Studio themes. The visualization of variables may be drawn in two versions, dark or light depending on the brightness of the theme background color.

About

GraphicalDebugging extension for Visual Studio


Languages

Language:C 61.2%Language:C# 32.4%Language:Perl 5.3%Language:Batchfile 0.7%Language:PowerShell 0.4%