53 votes

Pourquoi LLDB ne peut-il pas imprimer print.bounds?

Des choses comme cela me rendent fou lors du débogage:

 (lldb) p self.bounds
error: unsupported expression with unknown type
error: unsupported expression with unknown type
error: 2 errors parsing expression
(lldb) p (CGRect)self.bounds
error: unsupported expression with unknown type
error: unsupported expression with unknown type
error: C-style cast from '<unknown type>' to 'CGRect' is not allowed
error: 3 errors parsing expression
(lldb) p [self bounds]
error: 'bounds' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression
(lldb) p (CGRect)[self bounds]
(CGRect) $1 = origin=(x=0, y=0) size=(width=320, height=238)
(lldb) You suck!
error: 'You' is not a valid command.
(lldb) …
 

Pourquoi les 3 premières tentatives ont-elles échoué? Existe-t-il un moyen plus simple d’imprimer self.bounds ? Merci.

53voto

zhangyoufu Points 426

Vous pouvez y accéder par

 p (CGRect)[view bounds]
 

ou

 p view.layer.bounds
 

view.bounds est en fait view.layer.bounds

Il semble que la signature de [UIView bounds] ne soit pas disponible pour lldb . Je ne sais pas pourquoi

6voto

Gabriele Petronella Points 32362

LLDB ne prend pas en charge la notation par points pour l’envoi de messages avec p et c’est pourquoi

 p self.bounds
 

ne fonctionne pas, mais

 p [self bounds]
 

Est-ce que.

(Il prend en charge les objets lorsque vous utilisez po , cependant)

De plus, LLDB ne dispose pas d'informations de type non-objets disponibles au moment de l'exécution. Vous devez donc fournir explicitement un type en transmettant la valeur de retour.

0voto

Bryan Chen Points 14689

Je ne sais pas quel était le contexte lors de l'exécution de cette. Mais on dirait que lldb ne peut pas trouver le type d' self.

Pour lldb pour évaluer self.bounds, il faut connaître le type d' self est une Classe a des biens bounds. Il ne peut pas assumer self est ObjC type parce que vous pouvez l'appeler en vertu de ce contexte:

void test()
{
    struct 
    {
        int bounds;
    } self;
}

si vous obtenez le message d'erreur error: unsupported expression with unknown type

Toutefois, si vous appelez à l'aide d' [self bounds], lldb sait qu' self bien être ObjC type, [] de la syntaxe s'appliquent uniquement aux ObjC type. Mais puisque le type d' self n'est pas clair, il ne peut pas toujours d'évaluer le résultat de l' [self bounds] donc vous devez le convertir en CGRect

0voto

Bhavik Modi Points 21

Essayez avec l'expression suivante,

 p self.view.bounds.size.width
 

Ou utiliser,

 po self.view
 

p - Print est uniquement utilisé pour imprimer des valeurs normales / simples tandis que, po - Print Object fonctionne de la même manière que NSLog pour imprimer la valeur d'un objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X