diff options
-rw-r--r-- | debugger/command_line.ml | 5 | ||||
-rw-r--r-- | debugger/main.ml | 47 | ||||
-rw-r--r-- | debugger/symbols.ml | 3 |
3 files changed, 37 insertions, 18 deletions
diff --git a/debugger/command_line.ml b/debugger/command_line.ml index 1b5704e84..14c38c468 100644 --- a/debugger/command_line.ml +++ b/debugger/command_line.ml @@ -979,7 +979,10 @@ Argument N means do this N times (or till program stops for another reason)." }; (* Breakpoints *) { instr_name = "break"; instr_prio = false; instr_action = instr_break; instr_repeat = false; instr_help = -"Set breakpoint at specified line or function." }; +"Set breakpoint at specified line or function.\n\ +Syntax: break function-name\n\ + break @ [module] linenum\n\ + break @ [module] # characternum" }; { instr_name = "delete"; instr_prio = false; instr_action = instr_delete; instr_repeat = false; instr_help = "delete some breakpoints.\n\ diff --git a/debugger/main.ml b/debugger/main.ml index 1c8750219..ce6ca3d5d 100644 --- a/debugger/main.ml +++ b/debugger/main.ml @@ -75,10 +75,12 @@ let rec protect cont = let toplevel_loop () = protect loop +(* Parsing of command-line arguments *) + +exception Found_program_name + let anonymous s = - if !program_name = "" - then program_name := s - else arguments := Printf.sprintf "%s '%s'" !arguments s + program_name := s; raise Found_program_name let add_include d = default_load_path := d :: !default_load_path let set_socket s = @@ -90,22 +92,35 @@ let set_directory dir = let set_emacs () = emacs := true +let speclist = + ["-I", Arg.String add_include, + "<dir> Add <dir> to the list of include directories"; + "-s", Arg.String set_socket, + "<filename> Set the name of the communication socket"; + "-c", Arg.Int set_checkpoints, + "<count> Set max number of checkpoints kept"; + "-cd", Arg.String set_directory, + "<dir> Change working directory"; + "-emacs", Arg.Unit set_emacs, + "For running the debugger under emacs"] + let main () = try socket_name := "/tmp/camldebug" ^ (string_of_int (Unix.getpid ())); - Arg.parse - ["-I", Arg.String add_include, - "<dir> Add <dir> to the list of include directories"; - "-s", Arg.String set_socket, - "<filename> Set the name of the communication socket"; - "-c", Arg.Int set_checkpoints, - "<count> Set max number of checkpoints kept"; - "-cd", Arg.String set_directory, - "<dir> Change working directory"; - "-emacs", Arg.Unit set_emacs, - "For running the debugger under emacs"] - anonymous - ""; + begin try + Arg.parse speclist anonymous ""; + Arg.usage speclist + "No program name specified\n\ + Usage: ocamldebug [options] <program> [arguments]\n\ + Options are:"; + exit 2 + with Found_program_name -> + let i = ref 1 in + while Sys.argv.(!i) != !program_name do incr i done; + for j = !i + 1 to Array.length Sys.argv - 1 do + arguments := Printf.sprintf "%s '%s'" !arguments Sys.argv.(j) + done + end; current_prompt := debugger_prompt; print_string "\tObjective Caml Debugger version "; print_string Config.version; diff --git a/debugger/symbols.ml b/debugger/symbols.ml index dc8bf2667..281a53124 100644 --- a/debugger/symbols.ml +++ b/debugger/symbols.ml @@ -34,9 +34,10 @@ let all_events_by_module = let read_symbols' bytecode_file = let ic = open_in_bin bytecode_file in let pos_trailer = - in_channel_length ic - 16 - String.length Config.exec_magic_number in + in_channel_length ic - 20 - String.length Config.exec_magic_number in seek_in ic pos_trailer; let code_size = input_binary_int ic in + let prim_size = input_binary_int ic in let data_size = input_binary_int ic in let symbol_size = input_binary_int ic in let debug_size = input_binary_int ic in |