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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.