# Runtime_tools Release Notes

## Runtime_tools 1.4

### Fixed errors and malfunctions

- Added `include` directory
  (Own Id: OTP-4736)

## Runtime_tools 1.3

### Fixed errors and malfunctions

- dbg:p/2 always returns error (i.e. does not crash) if faulty flag is given. Also dbg:c/4 now executes on a separate process and internal messages are no longer traced.
  (Own Id: OTP-4111)
  (Aux Id: Seq7131)

### Improvements and new features

- - Trace ports can now be opened on remote nodes
  - It is possible to use the local node as a "trace control node", i.e. trace only remote nodes.
  - The function `dbg:i/0` now prints information about all traced nodes
  - Added function `dbg:tracer/3` - same as `tracer/2` but on the given node
  - Added function `dbg:flush_trace_port/1` - same as `flush_trace_port/0` but on the given node
  - Added function `dbg:trace_port_control/2` - same as `trace_port_control/1` but on the given node
  - Added function `dbg:get_tracer/1` - same as `get_tracer/0` but on the given node
  - Added function `dbg:stop_clear/0` - same as `stop/0` but also clears all trace patterns
  - Added functions `ctp/0`, `ctpl/0` and `ctpg/0` - clears trace patterns on all functions
  - (Incompatible) A tracer is no longer autmatically started on the local node. I.e. to start a tracer on the local node you must explicitly call `dbg:tracer/0` or `dbg:tracer/2`.
  - (Incompatible) `dbg:ln/0` now includes the local node if it is traced
  - (Incompatible) Return values from `dbg:p/2` and `dbg:tp/x` are changed - the element `{matched,N}` is replaced by `{matched,LocalNode,N}`
  (*** POTENTIAL INCOMPATIBILITY ***)
  (Own Id: OTP-4346)

## Runtime_tools 1.2

### Improvements and new features

- A number of bug fixes and improvements have been done to applications `runtime_tools`, `kernel` and `erts`:
  - A read timeout no longer resets the sequential trace token. This is an incompatibility towards the previous behaviour. Use `seq_trace:set_token([])` to reset the sequential trace token.
  - `seq_trace:get_token/0` and `seq_trace:set_token/1` now have compatible token formats.
  - `dbg:trace_port/2` and `dbg:trace_client/2,3` now supports trace to and read from a size limited "wrap file set".
  - `dbg:trace_port_control/1` now supports operation `get_listen_port` for the ip trace driver.
  - New match spec functions `{is_seq_trace}` and `{get_seq_trace}` has been added to test and read the sequential trace token in match specs.
  - New match spec functions `{get_tcw}` and `{set_tcw Value}` that reads and sets a "trace control word" in the node has been added. The "trace control word" is a word in each Erlang node of at least 24 bits. There are also enhancements of BIFs: `erlang:system_info(trace_control_word)` and `erlang:system_flag(trace_control_word, Value)` for the same purpose.
  - A new match spec function `{silent, TrueOrFalse}` for setting a silent call trace flag per process that inhibits call trace messages, both local and global, has been added. The BIF `erlang:trace/3` has been extended to recognize the flag 'silent' to start a call trace in silent mode.
  - Some bugs in the `dbg` module has been fixed, e.g the 'old_trace_call' flag has been removed from the 'all' flags list, and the dbg server no longer hangs if the supplied tracer fails to start.
  - A bug in the emulator that made 'EXIT' messages from a process involved in a sequential call trace get overwritten by the sequential trace token itself has been fixed.
  - The documentation regarding the above has been updated. Especially, the fact that the match spec function `{return_trace}` destroys the tail recursiveness of the traced function has been pointed out.
  (*** POTENTIAL INCOMPATIBILITY ***)
  (Own Id: OTP-3747)
  (Aux Id: OTP-3592, OTP-3744)

- A trace client fun that can be given to dbg:trace_client/3 now gets informed about the end of trace, so it can do something useful with its collected data. See dbg:trace_client/3.
  (*** POTENTIAL INCOMPATIBILITY ***)
  (Own Id: OTP-3933)
  (Aux Id: seq5193)

- The flag 'procs' to erlang:trace/3 has got a slightly new behaviour: Trace tag 'spawn' has a new element, and trace tags 'register', 'unregister', and 'getting_unlinked' are new. Therefore, new and/or different trace messages will arrive to the tracer when the 'procs' trace flag is used.
  (*** POTENTIAL INCOMPATIBILITY ***)
  (Own Id: OTP-3934)
  (Aux Id: seq5193)

- Wrap file traces now can limit the size of each file with a time instead of a size. See the documentation for dbg:trace_port/2.
  (Own Id: OTP-3935)
  (Aux Id: seq5193)

- When using trace flags 'running' and 'timestamp' to determine the amount of running time different processes in the system were using, the results were somewhat unreliable since the time to write the trace buffer itself randomly burdened the traced processes. This is now compensated for by faking process schedule out and in trace messages around the file writes (for the trace file driver trace_file_drv).
  (Own Id: OTP-3938)

- The file names for wrap file traces has been changed. This has been done to make it easier for auxiliary tools to know the file names when fetching wrap traces over the network, especially if the tools used for fetching does not support wildcards in filenames. See the documentation for dbg:trace_port/2. NOTE that this change may affect existing fetch tools. Especially note that the number of files in the wrap trace must now be known when reading the trace, or as it is stated in the documentation: the same wrap trace specification must be used when reading the trace as when creating the trace.
  (*** POTENTIAL INCOMPATIBILITY ***)
  (Own Id: OTP-3965)

## Runtime_tools 1.1.4

### Improvements and new features

- A number of bug fixes and improvements have been done to applications `runtime_tools`, `kernel` and `erts`:
  - A read timeout no longer resets the sequential trace token. This is an incompatibility towards the previous behaviour. Use `seq_trace:set_token([])` to reset the sequential trace token.
  - `seq_trace:get_token/0` and `seq_trace:set_token/1` now have compatible token formats.
  - `dbg:trace_port/2` and `dbg:trace_client/2,3` now supports trace to and read from a size limited "wrap file set".
  - `dbg:trace_port_control/1` now supports operation `get_listen_port` for the ip trace driver.
  - New match spec functions `{is_seq_trace}` and `{get_seq_trace}` has been added to test and read the sequential trace token in match specs.
  - New match spec functions `{get_tcw}` and `{set_tcw Value}` that reads and sets a "trace control word" in the node has been added. The "trace control word" is a word in each Erlang node of at least 24 bits. There are also enhancements of BIFs: `erlang:system_info(trace_control_word)` and `erlang:system_flag(trace_control_word, Value)` for the same purpose.
  - A new match spec function `{silent, TrueOrFalse}` for setting a silent call trace flag per process that inhibits call trace messages, both local and global, has been added. The BIF `erlang:trace/3` has been extended to recognize the flag 'silent' to start a call trace in silent mode.
  - Some bugs in the `dbg` module has been fixed, e.g the 'old_trace_call' flag has been removed from the 'all' flags list, and the dbg server no longer hangs if the supplied tracer fails to start.
  - A bug in the emulator that made 'EXIT' messages from a process involved in a sequential call trace get overwritten by the sequential trace token itself has been fixed.
  - The documentation regarding the above has been updated. Especially, the fact that the match spec function `{return_trace}` destroys the tail recursiveness of the traced function has been pointed out.
  (*** POTENTIAL INCOMPATIBILITY ***)
  Own Id: OTP-3747
  Aux Id: OTP-3592, OTP-3744

## Runtime_tools 1.1.2

### Improvements and new features

- New functions in the module `dbg`: `flush_trace_port`, `stop_trace_client`. There is a new option `follow_file` for `trace_client`.
  Own Id: OTP-3471
  Aux Id: OTP-3427
- Call tracing is greatly improved. It is now possible to trace local function calls (and calls to local functions) set up with the erlang:trace_pattern BIF. Trace compilation for local call is no longer needed. New functions in the module `dbg`: `h`, `tpl`, `ctpl`, `ctpg`. `tp` now only traces global functions - use `tpl` to trace global and local.
  Own Id: OTP-3518

## Runtime_tools 1.1.1

### Improvements and new features

- The trace_file_drv driver was internally rewritten to use the new erl_driver.h file.
  Own Id: OTP-3371