#ifndef LLDB_API_SBTARGET_H
#define LLDB_API_SBTARGET_H
+#include "lldb/lldb-private-enumerations.h"
+
#include "lldb/API/SBAddress.h"
#include "lldb/API/SBAttachInfo.h"
#include "lldb/API/SBBreakpoint.h"
uint32_t column, lldb::addr_t offset,
SBFileSpecList &module_list);
+ lldb::SBBreakpoint
+ BreakpointCreateByLocation(const lldb::SBFileSpec &file_spec, uint32_t line,
+ uint32_t column, lldb::addr_t offset,
+ SBFileSpecList &module_list,
+ bool move_to_nearest_code);
+
lldb::SBBreakpoint BreakpointCreateByName(const char *symbol_name,
const char *module_name = nullptr);
void SetSP(const lldb::TargetSP &target_sp);
private:
+ lldb::SBBreakpoint BreakpointCreateByLocationImpl(
+ const lldb::SBFileSpec &file_spec, uint32_t line, uint32_t column,
+ lldb::addr_t offset, SBFileSpecList &module_list,
+ const lldb_private::LazyBool move_to_nearest_code);
+
lldb::TargetSP m_opaque_sp;
};
offset, sb_module_list));
}
-SBBreakpoint SBTarget::BreakpointCreateByLocation(
- const SBFileSpec &sb_file_spec, uint32_t line, uint32_t column,
- lldb::addr_t offset, SBFileSpecList &sb_module_list) {
- LLDB_RECORD_METHOD(lldb::SBBreakpoint, SBTarget, BreakpointCreateByLocation,
- (const lldb::SBFileSpec &, uint32_t, uint32_t,
- lldb::addr_t, lldb::SBFileSpecList &),
- sb_file_spec, line, column, offset, sb_module_list);
-
+SBBreakpoint SBTarget::BreakpointCreateByLocationImpl(
+ const lldb::SBFileSpec &sb_file_spec, uint32_t line, uint32_t column,
+ lldb::addr_t offset, SBFileSpecList &sb_module_list,
+ const LazyBool move_to_nearest_code) {
SBBreakpoint sb_bp;
TargetSP target_sp(GetSP());
if (target_sp && line != 0) {
const LazyBool skip_prologue = eLazyBoolCalculate;
const bool internal = false;
const bool hardware = false;
- const LazyBool move_to_nearest_code = eLazyBoolCalculate;
const FileSpecList *module_list = nullptr;
if (sb_module_list.GetSize() > 0) {
module_list = sb_module_list.get();
skip_prologue, internal, hardware, move_to_nearest_code);
}
- return LLDB_RECORD_RESULT(sb_bp);
+ return sb_bp;
+}
+
+SBBreakpoint SBTarget::BreakpointCreateByLocation(
+ const SBFileSpec &sb_file_spec, uint32_t line, uint32_t column,
+ lldb::addr_t offset, SBFileSpecList &sb_module_list) {
+ LLDB_RECORD_METHOD(lldb::SBBreakpoint, SBTarget, BreakpointCreateByLocation,
+ (const lldb::SBFileSpec &, uint32_t, uint32_t,
+ lldb::addr_t, lldb::SBFileSpecList &),
+ sb_file_spec, line, column, offset, sb_module_list);
+
+ return LLDB_RECORD_RESULT(BreakpointCreateByLocationImpl(
+ sb_file_spec, line, column, offset, sb_module_list, eLazyBoolCalculate));
+}
+
+SBBreakpoint SBTarget::BreakpointCreateByLocation(
+ const SBFileSpec &sb_file_spec, uint32_t line, uint32_t column,
+ lldb::addr_t offset, SBFileSpecList &sb_module_list,
+ bool move_to_nearest_code) {
+ LLDB_RECORD_METHOD(lldb::SBBreakpoint, SBTarget, BreakpointCreateByLocation,
+ (const lldb::SBFileSpec &, uint32_t, uint32_t,
+ lldb::addr_t, lldb::SBFileSpecList &, bool),
+ sb_file_spec, line, column, offset, sb_module_list,
+ move_to_nearest_code);
+
+ return LLDB_RECORD_RESULT(BreakpointCreateByLocationImpl(
+ sb_file_spec, line, column, offset, sb_module_list,
+ move_to_nearest_code ? eLazyBoolYes : eLazyBoolNo));
}
SBBreakpoint SBTarget::BreakpointCreateByName(const char *symbol_name,
BreakpointCreateByLocation,
(const lldb::SBFileSpec &, uint32_t, uint32_t,
lldb::addr_t, lldb::SBFileSpecList &));
+ LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBTarget, BreakpointCreateByLocation,
+ (const lldb::SBFileSpec &, uint32_t, uint32_t,
+ lldb::addr_t, lldb::SBFileSpecList &, bool));
LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBTarget, BreakpointCreateByName,
(const char *, const char *));
LLDB_REGISTER_METHOD(lldb::SBBreakpoint, SBTarget, BreakpointCreateByName,
self.assertEqual(b_loc.GetLine(), 11)
in_condition |= b_loc.GetColumn() < 30
self.assertTrue(in_condition)
+
+ ## Skip gcc version less 7.1 since it doesn't support -gcolumn-info
+ @skipIf(compiler="gcc", compiler_version=['<', '7.1'])
+ def testBreakpointByLineAndColumnNearestCode(self):
+ self.build()
+ exe = self.getBuildArtifact("a.out")
+
+ main_c = lldb.SBFileSpec("main.c")
+ line = line_number("main.c", "// Line 20.")
+ column = len("// Line 20") # should stop at the period.
+ indent = 2
+ module_list = lldb.SBFileSpecList()
+
+ # Create a target from the debugger.
+ target = self.dbg.CreateTarget(exe)
+ self.assertTrue(target, VALID_TARGET)
+
+ valid_bpt = target.BreakpointCreateByLocation(main_c, line, column,
+ indent, module_list, True)
+ self.assertTrue(valid_bpt, VALID_BREAKPOINT)
+ self.assertEqual(valid_bpt.GetNumLocations(), 1)
+
+ invalid_bpt = target.BreakpointCreateByLocation(main_c, line, column,
+ indent, module_list, False)
+ self.assertTrue(invalid_bpt, VALID_BREAKPOINT)
+ self.assertEqual(invalid_bpt.GetNumLocations(), 0)
+