2017-12-03 1 views
0

Betrachten Sie die folgenden gdb-Befehle, die dieselbe Textzeichenfolge ausgeben.Wie gib ich einen gdb.Value() von einem String zurück?

(gdb) print foo 
(gdb) python print(gdb.lookup_symbol('foo')) 

In diesem Fall gdb.lookup_symbol()gdb.Value() eine Instanz wie erwartet zurückkehrt und das stringification davon ist auf den Standard GDB stringification äquivalent.

Aber betrachten nun die folgenden äquivalenten Fall:

(gdb) print *&foo 

Die *& ist ein noop, aber ich versuche gdb.lookup_symbol('*&foo') zu verwenden funktioniert nicht. Meine Frage ist also, ob es möglich ist, den Befehlszeilen-Dereferenzierungs-Parser von gdb aus Python zu verwenden, und dann eine gdb.Value als Gegenleistung zu erhalten?

Antwort

1

versuchen gdb.lookup_symbol ('* & foo') zu verwenden funktioniert nicht.

Das liegt daran, dass im Binärcode kein Symbol *&foo steht.

ob es möglich ist, gdb's Kommandozeilen-Dereferenzierungs-Parser aus Python zu verwenden, und dann einen gdb.Value als Gegenleistung erhält?

Ihre Frage ist nicht ganz klar, aber ich denke, Sie parse_and_eval fragen:

Function: gdb.parse_and_eval (expression) 
Parse expression, which must be a string, as an expression in the current language, 
evaluate it, and return the result as a gdb.Value. 

This function can be useful when implementing a new command (see Commands In Python), 
as it provides a way to parse the command’s argument as an expression. 
It is also useful simply to compute values, for example, it is the only way to get 
the value of a convenience variable (see Convenience Vars) as a gdb.Value. 
+0

Dies war in der Tat genau das, was ich suchte. :-) –

Verwandte Themen