it-swarm-pt.tech

Como exibir uma matriz alocada dinamicamente no depurador do Visual Studio?

Se você tiver uma matriz alocada estaticamente, o depurador do Visual Studio poderá exibir facilmente todos os elementos da matriz. No entanto, se você tiver uma matriz alocada dinamicamente e apontada por um ponteiro, ela exibirá apenas o primeiro elemento da matriz quando você clicar no + para expandi-lo. Existe uma maneira fácil de dizer ao depurador, mostre-me esses dados como uma matriz do tipo Foo e tamanho X?

142
Adam Rosenfield

Sim simples. diga que você tem

char *a = new char[10];

escrevendo no depurador:

a,10

mostraria o conteúdo como se fosse uma matriz.

187
shoosh

Existem dois métodos para visualizar dados em uma matriz m4x4:

float m4x4[16]={
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

Uma maneira é com uma janela Watch (Depuração/Windows/Watch). Adicionar relógio =

m4x4,16

Isso exibe dados em uma lista:

enter image description here

Outra maneira é com uma janela de memória (Debug/Windows/Memory). Especifique um endereço inicial da memória =

m4x4

Isso exibe dados em uma tabela, o que é melhor para matrizes bidimensionais e tridimensionais:

enter image description here

Clique com o botão direito do mouse na janela Memória para determinar como os dados binários são visualizados. As opções são limitadas a números inteiros, flutuantes e algumas codificações de texto.

32
Riaz Rizvi

Em uma janela de inspeção, adicione uma vírgula após o nome da matriz e a quantidade de itens que você deseja exibir.

21
Drealmer

uma revisitar:

vamos supor que você tenha um ponteiro abaixo:

double ** a; // assume 5*10

então você pode escrever abaixo no relógio de depuração do Visual Studio:

(double(*)[10]) a[0],5

que o converterá em uma matriz como abaixo, e você poderá visualizar todo o conteúdo de uma só vez.

double[5][10] a;
10
Gengpu Liu

Para,

int **a; //row x col

adicione isso para assistir

(int(**)[col])a,row
5
vicky

Ainda outra maneira de fazer isso é especificada aqui em MSDN .

Em resumo, você pode exibir uma matriz de caracteres como vários tipos de sequência. Se você tem uma matriz declarada como:

char *a = new char[10];

Você pode imprimi-lo como uma string unicode na janela de inspeção com o seguinte:

a,su

Veja as tabelas na página MSDN para todas as diferentes conversões possíveis, pois existem algumas. Muitas variantes de sequência diferentes, variantes para imprimir itens individuais na matriz, etc.

4
Taylor Price

Para matrizes MFC (CArray, CStringArray, ...), seguindo o próximo link na Dica nº 4

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

Por exemplo, para "CArray pArray", adicione nas janelas do Watch

     pArray.m_pData,5 

para ver os 5 primeiros elementos.

Se pArray for um CArray bidimensional, você poderá observar qualquer um dos elementos da segunda dimensão usando a próxima sintaxe:

     pArray.m_pData[x].m_pData,y
1
dabinsi

Você pode encontrar uma lista de muitas coisas que pode fazer com variáveis ​​na janela de inspeção nesta gema nos documentos: https://msdn.Microsoft.com/en-us/library/75w45ekt.aspx

Para uma variável a, existem as coisas já mencionadas em outras respostas, como

a,10 
a,su 

mas há muitos outros especificadores para formato e tamanho, como:

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)
1
Legolas

Não encontrei uma maneira de usar isso com uma matriz multidimensional. Mas você pode pelo menos (se você conhece o índice da entrada desejada) adicionar um relógio a um valor específico. Basta usar o operador de índice.

Para uma matriz denominada current, que possui uma matriz denominada Attribs dentro, e que possui uma matriz denominada Attrib dentro, deve ser assim se você desejar posicionar 26:

((*((*current).Attribs)).Attrib)[26]

Você também pode usar um deslocamento

((*((*current).Attribs)).Attrib)+25

mostrará ne "próximos" 25 elementos. (Estou usando o VS2008, isso mostra apenas 25 elementos no máximo).

0
wog