Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Expose hit count via SBBreakpointLocation.
Summary: SBBreakpointLocation exposed the ignore count, but didn't expose the hit count. Both values were exposed by SBBreakpoint and SBWatchpoint, so this makes things a bit more consistent. Reviewers: lldb-commits Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D31283 llvm-svn: 308480
- Loading branch information
1 parent
1298fd9
commit ccbf798
Showing
6 changed files
with
156 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 5 additions & 0 deletions
5
lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_hit_count/Makefile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
LEVEL = ../../../make | ||
|
||
CXX_SOURCES := main.cpp | ||
|
||
include $(LEVEL)/Makefile.rules |
109 changes: 109 additions & 0 deletions
109
.../lldbsuite/test/functionalities/breakpoint/breakpoint_hit_count/TestBreakpointHitCount.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
""" | ||
Test breakpoint hit count features. | ||
""" | ||
|
||
from __future__ import print_function | ||
|
||
import lldb | ||
from lldbsuite.test.decorators import * | ||
from lldbsuite.test.lldbtest import * | ||
from lldbsuite.test import lldbutil | ||
|
||
|
||
class BreakpointHitCountTestCase(TestBase): | ||
|
||
NO_DEBUG_INFO_TESTCASE = True | ||
|
||
mydir = TestBase.compute_mydir(__file__) | ||
|
||
@add_test_categories(['pyapi']) | ||
def test_breakpoint_location_hit_count(self): | ||
"""Use Python APIs to check breakpoint hit count.""" | ||
self.build() | ||
self.do_test_breakpoint_location_hit_count() | ||
|
||
def setUp(self): | ||
# Call super's setUp(). | ||
TestBase.setUp(self) | ||
self.a_int_body_line_no = line_number( | ||
'main.cpp', '// Breakpoint Location 1') | ||
self.a_float_body_line_no = line_number( | ||
'main.cpp', '// Breakpoint Location 2') | ||
|
||
def do_test_breakpoint_location_hit_count(self): | ||
"""Use Python APIs to check breakpoint hit count.""" | ||
exe = os.path.join(os.getcwd(), "a.out") | ||
|
||
target = self.dbg.CreateTarget(exe) | ||
self.assertTrue(target, VALID_TARGET) | ||
|
||
# Create a breakpoint in main.cpp by name 'a', | ||
# there should be two locations. | ||
breakpoint = target.BreakpointCreateByName('a', 'a.out') | ||
self.assertTrue(breakpoint and | ||
breakpoint.GetNumLocations() == 2, | ||
VALID_BREAKPOINT) | ||
|
||
# Verify all breakpoint locations are enabled. | ||
location1 = breakpoint.GetLocationAtIndex(0) | ||
self.assertTrue(location1 and | ||
location1.IsEnabled(), | ||
VALID_BREAKPOINT_LOCATION) | ||
|
||
location2 = breakpoint.GetLocationAtIndex(1) | ||
self.assertTrue(location2 and | ||
location2.IsEnabled(), | ||
VALID_BREAKPOINT_LOCATION) | ||
|
||
# Launch the process, and do not stop at entry point. | ||
process = target.LaunchSimple( | ||
None, None, self.get_process_working_directory()) | ||
self.assertTrue(process, PROCESS_IS_VALID) | ||
|
||
# Verify 1st breakpoint location is hit. | ||
from lldbsuite.test.lldbutil import get_stopped_thread | ||
thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) | ||
self.assertTrue( | ||
thread.IsValid(), | ||
"There should be a thread stopped due to breakpoint") | ||
|
||
frame0 = thread.GetFrameAtIndex(0) | ||
location1 = breakpoint.FindLocationByAddress(frame0.GetPC()) | ||
self.assertTrue( | ||
frame0.GetLineEntry().GetLine() == self.a_int_body_line_no, | ||
"Stopped in int a(int)") | ||
self.assertTrue(location1) | ||
self.assertEqual(location1.GetHitCount(), 1) | ||
self.assertEqual(breakpoint.GetHitCount(), 1) | ||
|
||
process.Continue() | ||
|
||
# Verify 2nd breakpoint location is hit. | ||
thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) | ||
self.assertTrue( | ||
thread.IsValid(), | ||
"There should be a thread stopped due to breakpoint") | ||
|
||
frame0 = thread.GetFrameAtIndex(0) | ||
location2 = breakpoint.FindLocationByAddress(frame0.GetPC()) | ||
self.assertTrue( | ||
frame0.GetLineEntry().GetLine() == self.a_float_body_line_no, | ||
"Stopped in float a(float)") | ||
self.assertTrue(location2) | ||
self.assertEqual(location2.GetHitCount(), 1) | ||
self.assertEqual(location1.GetHitCount(), 1) | ||
self.assertEqual(breakpoint.GetHitCount(), 2) | ||
|
||
process.Continue() | ||
|
||
# Verify 2nd breakpoint location is hit again. | ||
thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) | ||
self.assertTrue( | ||
thread.IsValid(), | ||
"There should be a thread stopped due to breakpoint") | ||
|
||
self.assertEqual(location2.GetHitCount(), 2) | ||
self.assertEqual(location1.GetHitCount(), 1) | ||
self.assertEqual(breakpoint.GetHitCount(), 3) | ||
|
||
process.Continue() |
27 changes: 27 additions & 0 deletions
27
lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_hit_count/main.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
//===-- main.cpp ------------------------------------------------*- C++ -*-===// | ||
// | ||
// The LLVM Compiler Infrastructure | ||
// | ||
// This file is distributed under the University of Illinois Open Source | ||
// License. See LICENSE.TXT for details. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
int a(int val) | ||
{ | ||
return val; // Breakpoint Location 1 | ||
} | ||
|
||
float a(float val) | ||
{ | ||
return val; // Breakpoint Location 2 | ||
} | ||
|
||
int main (int argc, char const *argv[]) | ||
{ | ||
int A1 = a(1); | ||
float A2 = a(2.0f); | ||
float A3 = a(3.0f); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -47,6 +47,9 @@ public: | |
bool | ||
IsEnabled (); | ||
|
||
uint32_t | ||
GetHitCount (); | ||
|
||
uint32_t | ||
GetIgnoreCount (); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters