2016-05-13 3 views
3

Je souhaite définir un point d'arrêt conditionnel avec lldb. Cela se fait habituellement à l'aide -c Option:Lldb: Définition du point d'arrêt conditionnel avec l'égalité de chaîne comme condition

breakpoint set -f myFile.cpp -l 123 -c 'a==3' 

Cependant, dans mon cas, je veux tester si un objet std::string est égale à une certaine valeur de chaîne, mais ce faisant

breakpoint set -f myFile.cpp -l 123 -c 'a=="hello"' 

ne fonctionne pas ... LLDB ne se plaint pas (alors que gdb renverrait une erreur) mais il ignore la chaîne de condition en atteignant le point de rupture et se brise trop tôt ...

Cette question est similaire à this one mais avec lldb au lieu de gdb. La solution présentée il

breakpoint set -f myFile.cpp -l 123 if strcmp(a, "hello")==0 

ne semble pas être valide avec LLDB

Version LLDB utilisée: 3,4

Répondre

2
(lldb) br s -n main -c '(int)strcmp("test", var)==0' 
Breakpoint 1: where = a.out`main + 11 at a.c:3, address = 0x0000000100000f8b 
(lldb) br li 
Current breakpoints: 
1: name = 'main', locations = 1 
Condition: (int)strcmp("test", var)==0 

    1.1: where = a.out`main + 11 at a.c:3, address = a.out[0x0000000100000f8b], unresolved, hit count = 0 

(lldb) 

Vous pouvez ajouter l'expression conditionnelle après le fait. Comme

(lldb) br s -n main 
Breakpoint 1: where = a.out`main + 11 at a.c:3, address = 0x0000000100000f8b 
(lldb) br mod -c '(int) strcmp("test", var) == 0' 
(lldb) br li 
Current breakpoints: 
1: name = 'main', locations = 1 
Condition: (int) strcmp("test", var) == 0 

    1.1: where = a.out`main + 11 at a.c:3, address = a.out[0x0000000100000f8b], unresolved, hit count = 0 

(lldb) 

breakpoint modify prend un certain nombre breakpoint/liste des numéros à la fin des points d'arrêt, par défaut le dernier point d'arrêt si aucun sont spécifiés (ce qui est ce que je faisais ici).