Re: gdb.error: "define PI" is not a prefix command.
Andrew Burgess via Gdb <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
* Simon Sobisch via Gdb <[email protected]> [2021-12-22 16:12:11 +0100]: > The following shows the issue quite well: > > (gdb) macro define PI1 (3.1415926) > (gdb) print PI1 > $1 = 3.1415926000000001 > (gdb) py gdb.execute("print PI1", True, False) > $2 = 3.1415926000000001 > (gdb) py gdb.execute("macro define PI2 (3.1415926)", True, False) > Traceback (most recent call last): > File "<string>", line 1, in <module> > gdb.error: "define PI2" is not a prefix command. > Error while executing Python code. > (gdb) print PI2 > No symbol "PI2" in current context. > > This is happening with GDB 8.2, Python 3.6.8. > > It did work with GDB 7.6: > > (gdb) macro define PI1 (3.1415926) > (gdb) print PI1 > $1 = 3.1415925999999996 > (gdb) py gdb.execute("print PI1", True, False) > $2 = 3.1415925999999996 > (gdb) py gdb.execute("macro define PI2 (3.1415926)", True, False) > (gdb) print PI2 > $3 = 3.1415925999999996 > (gdb) py gdb.execute("print PI1", True, False) > $24 = 3.1415925999999996 > > I've thought that this was related to the different python version (2.7.5 on > GDB 7.6), but it isn't. After building GDB 11.1 on the test machine (same > Python, obviously) it also works there. > > > Question: > Is there any way to execute this command with Python in GDB 8.2 > (= without upgrading GDB)? I tried GDB 8.2.1, and the bug is fixed in this release, if a minor update is possible then this would be the easiest solution... Failing that I found that this works: (gdb) shell cat ~/tmp/file.gdb macro define PI2 (3.1415926) (gdb) py gdb.execute("source ~/tmp/file.gdb", True, False) (gdb) print PI2 $1 = 3.1415926000000001 Certainly not idea, but, if you really are stuck on 8.2 then you can write the problematic commands into a temporary file, and source that from Python code. There might be other hack folk come up with. Thanks, Andrew