2016-08-12 1 views
0

J'ai un tableau de structures allouées dynamiquement que j'ai besoin d'imprimer dans LLDB, dans un point d'arrêt. Tout cela se passe dans du code C pur en dehors d'ObjC.LLDB: comment créer une fonction personnalisée qui imprime un tableau dynamique de structures

J'ai écrit une fonction statique qui fait le travail d'impression et tandis que je peux l'appeler à l'intérieur de LLDB, il imprimera seulement environ 60 lignes avant de s'arrêter silencieusement. Parfois, il n'imprimera rien à moins que j'appuie à nouveau sur Entrée dans LLDB. Je suppose que c'est dû au threading en quelque sorte, mais j'ai essayé de faire un dispatch_async à l'intérieur de cette fonction sans aucun succès - il n'imprimerait rien. Par conséquent, je suis à la recherche de solutions alternatives (peut-être un script Python) pour obtenir une jolie impression de ce tableau car il est essentiel pour mes efforts de débogage.

Répondre

1

Voulez-vous parler de quelque chose comme:

struct MyStruct {/* some stuff */}; 
struct MyStruct *struct_ptr = malloc(100 * sizeof(struct MyStruct)); 

et que vous voulez imprimer struct_ptr comme si vous aviez fait:

struct MyStruct struct_arr[100]; 

Si vous êtes sur LLDB avant Xcode 8.0, vous devez faire cela avec:

(LLDB) -c mémoire morte 100 -t MyStruct struct_ptr

Et si y ous avez un des Xcode 8.0 bêta de, vous pouvez utiliser la nouvelle commande parray:

(LLDB) parray 100 struct_ptr

+0

J'espérais obtenir plus de contrôle sur la sortie imprimée, mais cela fonctionne magnifiquement! Une chose qui mérite d'être mentionnée est que pour des tableaux plus grands (ou mieux des structures plus grandes), il faudrait "définir set target.max-memory-read-size 1048576' - ou une valeur assez grande pour contenir vos données. – CatalinM

+0

parray est juste un alias pour 'expression -Z - ' donc si vous voulez utiliser d'autres options de formatage, épelez la commande complètement et vous pouvez ajouter n'importe laquelle des options de formatage que la commande "expression" offre. Voir 'help expression', et souvenez-vous que vous devez mettre les options avant le' --'. –