File: C:/Users/fred/anaconda3/Lib/site-packages/numba/tests/gdb/test_break_on_symbol_version.py
# NOTE: This test is sensitive to line numbers as it checks breakpoints
from numba import njit
from numba.tests.gdb_support import GdbMIDriver
from numba.tests.support import TestCase, needs_subprocess
import unittest
def foo_factory(n):
@njit(debug=True)
def foo(x):
z = 7 + n
return x, z
return foo
foo1, foo2, foo3 = [foo_factory(x) for x in range(3)]
@njit(debug=True)
def call_foo():
a = foo1(10)
b = foo2(20)
c = foo3(30)
return a, b, c
@needs_subprocess
class Test(TestCase):
def test(self):
call_foo()
driver = GdbMIDriver(__file__)
# A specific foo, the first one, it has uid=2
vsym = "__main__::foo_factory::_3clocals_3e::foo[abi:v2]"
driver.set_breakpoint(symbol=vsym)
driver.run()
driver.check_hit_breakpoint(number=1)
driver.assert_regex_output(r'^.*foo\[abi:v2\].*line="11"')
driver.stack_list_arguments(2)
expect = ('[frame={level="0",args=[{name="x",type="Literal[int](10)",'
'value="10"}]}]')
driver.assert_output(expect)
# Now break on any foo
driver.set_breakpoint(symbol="foo")
driver.cont()
driver.check_hit_breakpoint(number=2)
driver.assert_regex_output(r'^.*foo\[abi:v3\].*line="11"')
driver.stack_list_arguments(2)
expect = ('[frame={level="0",args=[{name="x",type="Literal[int](20)",'
'value="20"}]}]')
driver.assert_output(expect)
# and again, hit the third foo
driver.cont()
driver.check_hit_breakpoint(number=2)
driver.assert_regex_output(r'^.*foo\[abi:v4\].*line="11"')
driver.stack_list_arguments(2)
expect = ('[frame={level="0",args=[{name="x",type="Literal[int](30)",'
'value="30"}]}]')
driver.assert_output(expect)
driver.quit()
if __name__ == '__main__':
unittest.main()