c++ xcode macos gdb

c++ - ¿Visualiza una matriz asignada dinámicamente con el depurador Xcode?



xcode c++ (3)

Digamos que tengo una matriz en C ++:

double* velocity = new double[100];

Usando la línea de comando GDB, puedo ver esta matriz con el comando:

> print *velocity @ 100

e imprimirá una lista muy bien formateada de todos los valores dobles dentro de la matriz.

Sin embargo, cuando se utiliza el depurador Xcode, lo máximo que se puede hacer es tratar esto como un puntero a un solo valor doble, y mostrar la velocidad [0] en la lista de variables.

Esto lo convierte en un verdadero PITA para depurar programas que contienen un gran conjunto dinámico asignado. Tiene que haber alguna manera de decirle a Xcode "Este es un puntero a una matriz de longitud 100", y hacer que muestre la cosa como tal. Alguien sabe lo que es?


No, lamentablemente, la GUI es limitada y tendrás que combinar una buena combinación de magia GDB para hacer las cosas.


Puede usar la sintaxis de gdb como expresiones:

  1. Use el menú Ejecutar / Mostrar / Expresiones ... para mostrar la ventana de expresiones
  2. Ingrese ''*velocity @ 100'' en la parte inferior de la ventana (Expression :)

Creo que mi respuesta será una buena adición para la anterior.

Las nuevas versiones de Xcode usan el depurador lldb como herramienta predeterminada en lugar de gdb .

De acuerdo con esta página :

Con el lanzamiento de Xcode 5, el depurador LLDB se convierte en la base de la experiencia de depuración en OS X.

Entonces para Xcode desde la versión 5 en adelante utilizo este comando lldb :

memory read -t int -c8 `array_name`

dónde:
8 - la cantidad de elementos en la matriz
array_name - el nombre de la matriz
int - el tipo de matriz

El resultado de la ejecución de este comando será algo como esto:

(lldb) memory read -t int -c8 array (int) 0x7fff5fbff870 = 7 (int) 0x7fff5fbff874 = 6 (int) 0x7fff5fbff878 = 9 (int) 0x7fff5fbff87c = 10 (int) 0x7fff5fbff880 = 1 (int) 0x7fff5fbff884 = 8 (int) 0x7fff5fbff888 = 4 (int) 0x7fff5fbff88c = 3