From 184157ac185c981d9511e7a36ba21d35f29c0032 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Sat, 17 Jan 2026 02:21:19 +0100 Subject: Add command-line option to set startup breakpoints --- README.md | 7 +++++++ tdbg.cpp | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7f37fdf..e28f4ed 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,13 @@ Example with arguments and environment variables: ./tdbg ./example -e MYENV=qwe -- arg1 arg2 arg3 ``` +Example with breakpoints: + +```sh +./tdbg ./example -b main +./tdbg ./example -b example.c:54 -b example.c:60 +``` + ### Interactive Commands | Key | Action | diff --git a/tdbg.cpp b/tdbg.cpp index 7b0e6d0..f66f35a 100644 --- a/tdbg.cpp +++ b/tdbg.cpp @@ -672,6 +672,7 @@ void draw_status_bar(SBProcess &process, InputMode mode, int width, int height) int main(int argc, char** argv) { std::vector target_env; + std::vector startup_breakpoints; std::vector debuggee_args; std::string target_path; @@ -679,6 +680,8 @@ int main(int argc, char** argv) { std::string arg = argv[i]; if (arg == "-e" && i + 1 < argc) { target_env.push_back(argv[++i]); + } else if (arg == "-b" && i + 1 < argc) { + startup_breakpoints.push_back(argv[++i]); } else if (arg == "--") { for (int j = i + 1; j < argc; ++j) { debuggee_args.push_back(argv[j]); @@ -692,7 +695,7 @@ int main(int argc, char** argv) { } if (target_path.empty()) { - std::cerr << "Usage: " << argv[0] << " [-e KEY=VALUE] ... [-- arg1 arg2 ...]\n"; + std::cerr << "Usage: " << argv[0] << " [-e KEY=VALUE] [-b BREAKPOINT] ... [-- arg1 arg2 ...]\n"; return 1; } @@ -712,6 +715,16 @@ int main(int argc, char** argv) { return 1; } + std::vector log_buffer; + for (const auto& bp_spec : startup_breakpoints) { + SBBreakpoint bp = create_breakpoint(target, bp_spec); + if (bp.IsValid() && bp.GetNumLocations() > 0) { + log_msg(log_buffer, "Set startup breakpoint: " + bp_spec); + } else { + log_msg(log_buffer, "Failed to set startup breakpoint: " + bp_spec); + } + } + SBProcess process; SBThread thread; @@ -721,7 +734,6 @@ int main(int argc, char** argv) { InputMode mode = INPUT_MODE_NORMAL; std::string input_buffer; std::string current_source_filename; - std::vector log_buffer; std::vector watch_expressions; int log_scroll_offset = 0; int locals_scroll_offset = 0; -- cgit v1.2.3