mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-23 21:45:46 -04:00

Summary: A lot of tests do this trick but the vast majority of them don't even call `print()`. Most of this patch was generated by a script that just looks at all the files and deletes the line if there is no `print (` or `print(` anywhere else in the file. I checked the remaining tests manually and deleted the import if we never call print (but instead do stuff like `expr print(...)` and similar false-positives). I also corrected the additional empty lines after the import in the files that I manually edited. Reviewers: JDevlieghere, labath, jfb Reviewed By: labath Subscribers: dexonsmith, wuzish, nemanjai, kbarton, christof, arphaman, abidh, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D71452
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
"""
|
|
Test embedded breakpoints, like `asm int 3;` in x86 or or `__debugbreak` on Windows.
|
|
"""
|
|
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
class DebugBreakTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
@skipIf(archs=no_match(["i386", "i686", "x86_64"]))
|
|
@no_debug_info_test
|
|
def test_asm_int_3(self):
|
|
"""Test that intrinsics like `__debugbreak();` and `asm {"int3"}` are treated like breakpoints."""
|
|
self.build()
|
|
exe = self.getBuildArtifact("a.out")
|
|
|
|
# Run the program.
|
|
target = self.dbg.CreateTarget(exe)
|
|
process = target.LaunchSimple(
|
|
None, None, self.get_process_working_directory())
|
|
|
|
# We've hit the first stop, so grab the frame.
|
|
self.assertEqual(process.GetState(), lldb.eStateStopped)
|
|
stop_reason = lldb.eStopReasonException if (lldbplatformutil.getPlatform(
|
|
) == "windows" or lldbplatformutil.getPlatform() == "macosx") else lldb.eStopReasonSignal
|
|
thread = lldbutil.get_stopped_thread(process, stop_reason)
|
|
self.assertIsNotNone(
|
|
thread, "Unable to find thread stopped at the __debugbreak()")
|
|
frame = thread.GetFrameAtIndex(0)
|
|
|
|
# We should be in funciton 'bar'.
|
|
self.assertTrue(frame.IsValid())
|
|
function_name = frame.GetFunctionName()
|
|
self.assertTrue('bar' in function_name,
|
|
"Unexpected function name {}".format(function_name))
|
|
|
|
# We should be able to evaluate the parameter foo.
|
|
value = frame.EvaluateExpression('*foo')
|
|
self.assertEqual(value.GetValueAsSigned(), 42)
|
|
|
|
# The counter should be 1 at the first stop and increase by 2 for each
|
|
# subsequent stop.
|
|
counter = 1
|
|
while counter < 20:
|
|
value = frame.EvaluateExpression('count')
|
|
self.assertEqual(value.GetValueAsSigned(), counter)
|
|
counter += 2
|
|
process.Continue()
|
|
|
|
# The inferior should exit after the last iteration.
|
|
self.assertEqual(process.GetState(), lldb.eStateExited)
|