mirror of
https://github.com/intel/llvm.git
synced 2026-02-02 02:00:03 +08:00
Added python_api/event/TestEvents.py to get the listener object associated with the
debugger and to exercise some event APIs. llvm-svn: 122304
This commit is contained in:
5
lldb/test/python_api/event/Makefile
Normal file
5
lldb/test/python_api/event/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
LEVEL = ../../make
|
||||
|
||||
C_SOURCES := main.c
|
||||
|
||||
include $(LEVEL)/Makefile.rules
|
||||
100
lldb/test/python_api/event/TestEvents.py
Normal file
100
lldb/test/python_api/event/TestEvents.py
Normal file
@@ -0,0 +1,100 @@
|
||||
"""
|
||||
Test lldb Python event APIs.
|
||||
"""
|
||||
|
||||
import os, time
|
||||
import re
|
||||
import unittest2
|
||||
import lldb, lldbutil
|
||||
from lldbtest import *
|
||||
|
||||
class EventAPITestCase(TestBase):
|
||||
|
||||
mydir = os.path.join("python_api", "event")
|
||||
|
||||
@unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
|
||||
@python_api_test
|
||||
def test_with_dsym(self):
|
||||
"""Exercise SBEvent APIs."""
|
||||
self.buildDsym()
|
||||
self.do_events()
|
||||
|
||||
@python_api_test
|
||||
def test_with_dwarf(self):
|
||||
"""Exercise SBEvent APIs."""
|
||||
self.buildDwarf()
|
||||
self.do_events()
|
||||
|
||||
def setUp(self):
|
||||
# Call super's setUp().
|
||||
TestBase.setUp(self)
|
||||
# Find the line number to of function 'c'.
|
||||
self.line = line_number('main.c', '// Find the line number of function "c" here.')
|
||||
|
||||
def do_events(self):
|
||||
"""Get the listener associated with the debugger and exercise some event APIs."""
|
||||
exe = os.path.join(os.getcwd(), "a.out")
|
||||
|
||||
# Create a target by the debugger.
|
||||
target = self.dbg.CreateTarget(exe)
|
||||
self.assertTrue(target.IsValid(), VALID_TARGET)
|
||||
|
||||
# Now create a breakpoint on main.c by name 'c'.
|
||||
breakpoint = target.BreakpointCreateByName('c', 'a.out')
|
||||
#print "breakpoint:", breakpoint
|
||||
self.assertTrue(breakpoint.IsValid() and
|
||||
breakpoint.GetNumLocations() == 1,
|
||||
VALID_BREAKPOINT)
|
||||
|
||||
# Now launch the process, and do not stop at entry point.
|
||||
self.process = target.LaunchProcess([''], [''], os.ctermid(), 0, False)
|
||||
|
||||
self.process = target.GetProcess()
|
||||
self.assertTrue(self.process.IsValid(), PROCESS_IS_VALID)
|
||||
|
||||
# Get a handle on the process's broadcaster.
|
||||
broadcaster = self.process.GetBroadcaster()
|
||||
self.assertTrue(broadcaster.IsValid(), "Process with valid broadcaster")
|
||||
|
||||
# Create an empty event object.
|
||||
event = lldb.SBEvent()
|
||||
self.assertFalse(event.IsValid(), "Event should not be valid initially")
|
||||
|
||||
# Get the debugger listenr.
|
||||
listener = self.dbg.GetListener()
|
||||
|
||||
# Create MyListeningThread to wait for any kind of event.
|
||||
import threading
|
||||
class MyListeningThread(threading.Thread):
|
||||
def run(self):
|
||||
print "Running MyListeningThread:", self
|
||||
count = 0
|
||||
# Let's only try at most 3 times to retrieve any kind of event.
|
||||
while not count > 3:
|
||||
if listener.WaitForEvent(5, event):
|
||||
print "Got a valid event:", event
|
||||
print "Event type:", event.GetType()
|
||||
print "Event broadcaster:", event.GetBroadcaster().GetName()
|
||||
return
|
||||
count = count + 1
|
||||
print "Timeout: listener.WaitForEvent"
|
||||
|
||||
return
|
||||
|
||||
# Let's start the listening thread before we launch the inferior process.
|
||||
my_thread = MyListeningThread()
|
||||
my_thread.start()
|
||||
|
||||
# Use Python API to continue the process. The listening thread should be
|
||||
# able to receive a state changed event.
|
||||
self.process.Continue()
|
||||
|
||||
my_thread.join()
|
||||
self.assertTrue(event.IsValid())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import atexit
|
||||
lldb.SBDebugger.Initialize()
|
||||
atexit.register(lambda: lldb.SBDebugger.Terminate())
|
||||
unittest2.main()
|
||||
49
lldb/test/python_api/event/main.c
Normal file
49
lldb/test/python_api/event/main.c
Normal file
@@ -0,0 +1,49 @@
|
||||
//===-- main.c --------------------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#include <stdio.h>
|
||||
|
||||
// This simple program is to test the lldb Python API related to events.
|
||||
|
||||
int a(int);
|
||||
int b(int);
|
||||
int c(int);
|
||||
|
||||
int a(int val)
|
||||
{
|
||||
if (val <= 1)
|
||||
return b(val);
|
||||
else if (val >= 3)
|
||||
return c(val);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
int b(int val)
|
||||
{
|
||||
return c(val);
|
||||
}
|
||||
|
||||
int c(int val)
|
||||
{
|
||||
return val + 3; // Find the line number of function "c" here.
|
||||
}
|
||||
|
||||
int main (int argc, char const *argv[])
|
||||
{
|
||||
int A1 = a(1); // a(1) -> b(1) -> c(1)
|
||||
printf("a(1) returns %d\n", A1);
|
||||
|
||||
int B2 = b(2); // b(2) -> c(2)
|
||||
printf("b(2) returns %d\n", B2);
|
||||
|
||||
int A3 = a(3); // a(3) -> c(3)
|
||||
printf("a(3) returns %d\n", A3);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user