--- a/numba/tests/gdb/test_array_arg.py
+++ b/numba/tests/gdb/test_array_arg.py
@@ -2,10 +2,11 @@
 from numba import njit, types
 import numpy as np
 from numba.tests.gdb_support import GdbMIDriver
-from numba.tests.support import TestCase, needs_subprocess
+from numba.tests.support import TestCase, needs_subprocess, needs_numba_opt_0
 import unittest
 
 
+@needs_numba_opt_0
 @needs_subprocess
 class Test(TestCase):
 
--- a/numba/tests/gdb/test_basic.py
+++ b/numba/tests/gdb/test_basic.py
@@ -1,10 +1,11 @@
 # NOTE: This test is sensitive to line numbers as it checks breakpoints
 from numba import njit, types
 from numba.tests.gdb_support import GdbMIDriver
-from numba.tests.support import TestCase, needs_subprocess
+from numba.tests.support import TestCase, needs_subprocess, needs_numba_opt_0
 import unittest
 
 
+@needs_numba_opt_0
 @needs_subprocess
 class Test(TestCase):
 
--- a/numba/tests/gdb/test_break_on_symbol.py
+++ b/numba/tests/gdb/test_break_on_symbol.py
@@ -1,7 +1,7 @@
 # NOTE: This test is sensitive to line numbers as it checks breakpoints
 from numba import njit, types
 from numba.tests.gdb_support import GdbMIDriver
-from numba.tests.support import TestCase, needs_subprocess
+from numba.tests.support import TestCase, needs_subprocess, needs_numba_opt_0
 import unittest
 
 
@@ -11,6 +11,7 @@
     return x, z
 
 
+@needs_numba_opt_0
 @needs_subprocess
 class Test(TestCase):
 
--- a/numba/tests/gdb/test_break_on_symbol_version.py
+++ b/numba/tests/gdb/test_break_on_symbol_version.py
@@ -1,7 +1,7 @@
 # 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
+from numba.tests.support import TestCase, needs_subprocess, needs_numba_opt_0
 import unittest
 
 
@@ -25,6 +25,7 @@
     return a, b, c
 
 
+@needs_numba_opt_0
 @needs_subprocess
 class Test(TestCase):
 
--- a/numba/tests/gdb/test_conditional_breakpoint.py
+++ b/numba/tests/gdb/test_conditional_breakpoint.py
@@ -1,10 +1,11 @@
 # 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
+from numba.tests.support import TestCase, needs_subprocess, needs_numba_opt_0
 import unittest
 
 
+@needs_numba_opt_0
 @needs_subprocess
 class Test(TestCase):
 
--- a/numba/tests/gdb/test_pretty_print.py
+++ b/numba/tests/gdb/test_pretty_print.py
@@ -2,12 +2,13 @@
 from numba import njit
 import numpy as np
 from numba.tests.gdb_support import GdbMIDriver, needs_gdb_py3
-from numba.tests.support import TestCase, needs_subprocess
+from numba.tests.support import TestCase, needs_subprocess, needs_numba_opt_0
 from numba.misc.numba_gdbinfo import collect_gdbinfo
 import unittest
 import re
 
 
+@needs_numba_opt_0
 @needs_gdb_py3
 @needs_subprocess
 class Test(TestCase):
--- a/numba/tests/support.py
+++ b/numba/tests/support.py
@@ -158,6 +158,11 @@
                                             'missing'))
 
 
+# gdb tests needs NUMBA_OPT=0
+needs_numba_opt_0 = unittest.skipUnless(
+    os.environ.get("NUMBA_OPT") == '0',
+    "gdb tests require NUMBA_OPT level zero")
+
 def ignore_internal_warnings():
     """Use in testing within a ` warnings.catch_warnings` block to filter out
     warnings that are unrelated/internally generated by Numba.
--- a/numba/tests/test_gdb_dwarf.py
+++ b/numba/tests/test_gdb_dwarf.py
@@ -9,6 +9,7 @@
 import unittest
 
 
+@unittest.skip("Isn't working on Debian")
 @linux_only
 @needs_gdb
 @skip_unless_pexpect
--- a/numba/tests/test_debuginfo.py
+++ b/numba/tests/test_debuginfo.py
@@ -294,6 +294,7 @@
         else:
             self.fail('Assertion on DILocalVariable not made')
 
+    @unittest.skip("Unstable under Debian")
     @TestCase.run_test_in_subprocess(envvars=_NUMBA_OPT_0_ENV)
     def test_DILocation_entry_blk(self):
         # Needs a subprocess as jitting literally anything at any point in the
@@ -351,6 +352,7 @@
         # check the uncondition jump instr itself has no metadata
         self.assertTrue(str(ujmp).endswith(target))
 
+    @unittest.skip("Unstable under Debian")
     @TestCase.run_test_in_subprocess(envvars=_NUMBA_OPT_0_ENV)
     def test_DILocation_decref(self):
         """ This tests that decref's generated from `ir.Del`s as variables go
