| # Copyright (C) 2025 Free Software Foundation, Inc. | |
| # This program is free software; you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation; either version 3 of the License, or | |
| # (at your option) any later version. | |
| # | |
| # This program is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # | |
| # You should have received a copy of the GNU General Public License | |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| # This file is part of the GDB testsuite. | |
| import gdb | |
| class PyCommandsBreakpoint(gdb.Breakpoint): | |
| bp_dict = dict() | |
| def __init__(self, *args, **kwargs): | |
| gdb.Breakpoint.__init__(self, *args, **kwargs) | |
| PyCommandsBreakpoint.bp_dict[self.number] = self | |
| self.commands = "" | |
| @staticmethod | |
| def run_py_commands(num): | |
| bp = PyCommandsBreakpoint.bp_dict[num] | |
| if hasattr(bp, "py_commands"): | |
| bp.py_commands() | |
| def __setattr__(self, name, value): | |
| if name == "commands": | |
| l = ["python PyCommandsBreakpoint.run_py_commands(%d)" % self.number] | |
| if value != "": | |
| l.append(value) | |
| value = "\n".join(l) | |
| super().__setattr__(name, value) | |
| class TestBreakpoint(PyCommandsBreakpoint): | |
| def __init__(self): | |
| PyCommandsBreakpoint.__init__(self, spec="test") | |
| self.var = 1 | |
| self.commands = "continue" | |
| self.silent = True | |
| def stop(self): | |
| if self.var == 3: | |
| self.commands = "" | |
| return True | |
| def py_commands(self): | |
| print("VAR: %d" % self.var) | |
| self.var += 1 |