microsoft / microsoft/vscode-cpptools

natvis is failing to read conditional with variables with Eigen

Open
#3,164 2 comments 1 reaction 1 assignee View on GitHub

@pieandcakes is already working on this.

Since Feb 13, 2019.

bug debugger
Dominant language
TypeScript
Stars
6.2k
Forks
1.7k
Avg merge
14h 46m
Merged PRs (30d)
61

Description

I am running Visual Studio 2017 15.9.5
I am trying to make an addition to a natvis for the Eigen library available here

I am basically making a variant of: <Type Name="Eigen::Matrix&lt;*,-1,-1,*,*,*&gt;"> for Eigen::Map.
I used the code already in place in the natvis as a platform:

  <Type Name="Eigen::Map&lt;Eigen::Matrix&lt;*,-1,-1,*,*,*&gt;,*,*&gt;">
    <DisplayString Condition="m_data == 0">empty</DisplayString>
    <DisplayString Condition="m_data != 0">Map[{m_rows.m_value}, {m_cols.m_value}] (dynamic matrix)</DisplayString>
    <Expand>
      <ArrayItems Condition="Flags%2"> <!-- row major layout -->
        <Rank>2</Rank>
        <Size>$i==0 ? m_rows.m_value : m_cols.m_value</Size>
        <ValuePointer>m_data</ValuePointer>
      </ArrayItems>
      <ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
        <Direction>Backward</Direction>
        <Rank>2</Rank>
        <Size>$i==0 ? m_rows.m_value : m_cols.m_value</Size>
        <ValuePointer>m_data</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

Using trial and error, I know that my issue is with the line (in both locations):

<Size>$i==0 ? m_rows.m_value : m_cols.m_value</Size>

This is because if I replace either m_rows.m_value or m_cols.m_value with some constant integer, then it runs fine but not the way I want it to run, of course.

How do I get this to work?
I also have a stackoverflow questions here.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.