summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1997-06-13 15:50:32 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1997-06-13 15:50:32 +0000
commit967558958ca72cb75f308593f4c839b40f2a824d (patch)
tree7c9cb0f5b4a7cf61166599764c87acf0ec028f99
parentc99916fdb9585905e9545584167b8f680e15ff96 (diff)
symbols: nouveau format d'executable.
main: parsing des arguments sur la ligne de commande revu. command_line: meilleur message d'aide pour "break". git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1595 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--debugger/command_line.ml5
-rw-r--r--debugger/main.ml47
-rw-r--r--debugger/symbols.ml3
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