Usage statistics collection¶
UDB collects some usage statistics to protect Undo from unlicensed or unlawful use of our software and services, plus some additional usage data to help us improve our products. This does not include any data about or from the programs being debugged.
By default, the additional usage data is anonymized. However, we encourage you to opt in to share full, and personally-identifying, usage statistics; this will help us to improve our products and to improve our customer support.
For more details, see Undo’s privacy policy. To change which information is shared with Undo, use the set share-usage-statistics command.
Implementation details¶
This page explains how our usage statistics collection works and what is collected.
While running, UDB collects information about the features used, and saves them into a JSON file
in $XDG_DATA_HOME/undo/udb/telemetry/v2/
where $XDG_DATA_HOME
, if unset, defaults to
~/.local/share/
.
The filename is comprised of a random UUID and the .json
extension.
The JSON files are formatted in a human-readable way to make it easier to inspect them.
When UDB quits, the JSON file is submitted to our api.undo.io
server.
If delivery fails (for instance, because the user is not connected to the Internet) the file is
cached on disk and is submitted the next time UDB is started.
Once the usage statistics JSON file is received by the server, personally-identifiable data and
additional usage data are split into separate collections (i.e. tables).
With the default setting of share-usage-statistics, the two sets
of information cannot be linked and are totally independent thus anonymizing the additional usage
data.
With explicit user permission (that is, when the user agrees to share full usage statistics in the
prompt shown by UDB, or by using set share-usage-statistics on),
the telemetry_id
, license
and user_id
fields (described below) are used to create a
relationship between the two sets of data.
Changed in version 7.0: In previous versions of UDB, usage statistics collection was implemented in a different way, without support for anonymized data. The current system is meant to provide Undo with more data while improving on users’ privacy.
JSON format description¶
Each bullet point corresponds to a key in the JSON dictionary submitted to our API server. Indented bullet points represent nested values.
comment (string)
A string referring to this page for users who accidentally discover the usage statistics JSON files and open them.
session_id (string)
Unique random identifier (UUID) for this UDB session which is used to prevent multiple accidental submissions of the same file.
This identifier is also used as part of the file name where the JSON is saved on disk before submission.
licensing (object)
License enforcement data.
This is always included and contains personally-identifiable information which is used to protect Undo from unlicensed use of our software.
This object contains the following keys:
license (string)
The UID of the license.
Example:
"e22bbc6c7ad0e26adb07496f60de4a603e4781d44d6c3ca0d63b96ac"
username (string or null)
For licenses configured to use a keyserver, the username. Otherwise,
null
.Example:
"john_smith"
keyserver_id (string or null)
For licenses configured to use a keyserver, the identifier used for communications with the keyserver. Otherwise,
null
.udb_version (string)
The version of UDB.
This information is also included in the additional usage data section (the
to_be_anonymized
key).Example:
"8.0.1"
is_redistributable_udb (boolean)
Whether this usage statistics are generated by Redistributable UDB, a UDB variant with limited features that can be shipped together with customers’ applications.
This information is also included in the additional usage data section (the
to_be_anonymized
key).start_time (date and time as string)
The UTC wall-clock time at which the UDB session started.
Example:
"2023-08-10T16:05:35.123456"
end_time (date and time as string)
The UTC wall-clock time at which the UDB session ended.
Example:
"2023-08-10T18:12:01.654321"
license_accepted (boolean or null)
Whether the user has accepted the license, or
null
if the user could not be asked (for instance, because they are using an IDE that doesn’t support this feature).used_licensable_features (object)
Which licensable features were used by this UDB session.
This information is also included in the additional usage data section (the
to_be_anonymized
key).This object contains the following keys:
started_process (boolean)
Whether a live process was started by UDB.
attached_to_process (boolean)
Whether UDB attached to a running process.
loaded_core (boolean)
Whether UDB loaded a core file.
loaded_recording (boolean)
Whether UDB loaded an Undo recording.
saved_recording (boolean)
Whether UDB saved a process’s execution history to an Undo recording.
remote_debugging (boolean)
Whether UDB used a remote server for debugging.
replay_service (boolean)
Whether a replay service was used.
New in version 7.3.0.
used_archs (object)
The CPU architectures for debugged programs or loaded Undo recordings during this UDB sesssion.
This information is also included in the additional usage data section (the
to_be_anonymized
key).This object contains the following keys:
x64 (boolean)
Whether any of the debugged programs or loaded Undo recordings are Linux AMD/Intel x86-64 processes.
x32 (boolean)
Whether any of the debugged programs or loaded Undo recordings are Linux Intel i386 processes.
Note that this is unrelated to the rarely used x32 ABI which the Undo Engine doesn’t support.
arm64 (boolean)
Whether any of the debugged programs or loaded Undo recordings are Linux ARMv8 AArch64 processes.
tool (string)
The tool used for this session.
This is
"udb_plain"
for direct uses of UDB but, for instance, it’s"postfailurelogging"
if UDB is used via thepostfailurelog
tool.This is similar to the
ui
field part of theto_be_anonymized
object but it’s more coarse as it’s only used to verify that users use tools in accordance with the terms of their licenses.auto_quit (string)
Auto-quit configuration applied to this session.
New in version 7.1.0.
auto_quit_attempts (list of objects)
Record of occasions where the auto-quit timeout was reached.
New in version 7.1.0.
time (date and time as string)
The UTC wall-clock time at which the session either quit or was canceled.
result (string)
The result of triggering auto-quit.
auto_quit_longest_inactive_time (elapsed seconds as floating point number or null)
The longest inactive time during this sessions or
null
if auto-quit is not enabled.New in version 7.2.0.
to_be_anonymized (object)
Additional usage data.
By default, share-usage-statistics is set to
anonymized
, which means this part of the usage statistics is anonymized once the server receives it.If the share-usage-statistics setting is set to
licensing-only
, additional usage data is not collected and this field is set tonull
.This object contains the following keys:
telemetry_id (string)
A randomly-generated UUID that is preserved across runs of UDB by the same user on the same machine. This is used to identify the same user across UDB sessions without revealing the user’s identity or personal data.
Example:
"bc8bbbcf-2e97-4de9-9f83-28e556433735"
sequence_number (integer)
A number that increments with each UDB session (started by the same user on the same machine), which is used to know the order of sessions.
New in version 8.0.0.
license (string or null)
Either the UID of the license (for larger customers) or
null
(for smaller ones).Identifying the customer in usage data allows Undo to target improvements at customer-specific use cases.
For smaller customers, where a license could identify a single user or a few users, identifying the customer would defeat anonymization, so this field is
null
.Example:
"e22bbc6c7ad0e26adb07496f60de4a603e4781d44d6c3ca0d63b96ac"
New in version 7.2.0.
udb_version (string)
The version of UDB.
This information is also included in the mandatory licensing section (the
licensing
key).Example:
"8.0.1"
is_redistributable_udb (boolean)
Whether this session was generated by Redistributable UDB, a UDB variant with limited features that can be shipped together with customers’ applications.
This information is also included in the mandatory licensing section (the
licensing
key).start_month (string)
The year and month (in the UTC timezone) when the UDB session started.
This is part of the same information as the
start_time
field from the licensing data. The time and day are truncated for privacy reasons, so that this section of the usage statistics (the anonymized additional usage data) cannot be correlated with the licensing data.Example:
"2023-08"
New in version 7.2.0.
arch (string)
The CPU architecture on which UDB is running.
Valid values are
"x64"
for Linux AMD/Intel x86-64 CPUs, and"arm64"
for ARMv8 AArch64 CPUs.Note that this information is also duplicated in the
machine.arch
field due to historical reasons.Example:
"x64"
New in version 7.3.0.
machine (object)
Information about the machine on which UDB is running.
New in version 8.0.0.
arch (string)
The CPU architecture of the machine.
Valid values are
"x64"
for Linux AMD/Intel x86-64 CPUs, and"arm64"
for ARMv8 AArch64 CPUs.Example:
"x64"
page_size (integer or null)
The size of a memory page, in bytes, or
null
if the page size is unknown.Example:
4096
deferred_recording (boolean)
Whether UDB was started in deferred-recording mode.
ui (string)
The interface through which the user interacted with UDB.
For instance, if UDB is used on the terminal with no additional UI, then this is set to
"udb_console"
. If UDB is used via Visual Studio Code, then this is set to"vscode"
.tui_used (boolean)
Whether TUI (GDB’s Text User Interface) was used.
used_licensable_features (object)
Which licensable features were used by this UDB session.
This information is also included in the mandatory licensing section (the
licensing
key).started_process (boolean)
Whether a live process was started by UDB.
attached_to_process (boolean)
Whether UDB attached to a running process.
loaded_core (boolean)
Whether UDB loaded a core file.
loaded_recording (boolean)
Whether UDB loaded an Undo recording.
saved_recording (boolean)
Whether UDB saved a process’s execution history to an Undo recording.
remote_debugging (boolean)
Whether UDB used a remote server for debugging.
replay_service (boolean)
Whether a replay service was used.
New in version 7.3.0.
used_archs (object)
The CPU architectures for debugged programs or loaded Undo recordings during this UDB sesssion.
This information is also included in the mandatory licensing section (the
licensing
key).x64 (boolean)
Whether any of the debugged programs or loaded Undo recordings are Linux AMD/Intel x86-64 processes.
x32 (boolean)
Whether any of the debugged programs or loaded Undo recordings are Linux Intel i386 processes.
Note that this is unrelated to the rarely used x32 ABI which the Undo Engine doesn’t support.
arm64 (boolean)
Whether any of the debugged programs or loaded Undo recordings are Linux ARMv8 AArch64 processes.
commands (list of objects)
A list of commands which were executed.
Each object in the list contains the following keys:
name (string)
The command name, without any argument.
In case of aliases or abbreviations, the full original command name is used.
Example:
"reverse-next"
result (string)
Whether the command succeeded, failed or was interrupted by the user.
"success"
: The command terminated successfully."error"
: The command terminated with an error. For instance, the user tried to use the step command while the debugged program was not running."interrupted"
: the command was interrupted by the user with ctrl-C.
exceptions (list of objects)
In case
result
indicates an error, this field contains information about the Python exception that caused the failure (the first element of the list), and any further chained exceptions. Otherwise, the list is empty.New in version 8.0.0.
Each object in the list contains the following keys:
name (string or null)
For builtin exceptions, and exceptions defined by UDB or one of its packages, this is the name of the exception. Otherwise, this is
null
as the exception name could contain sensitive information (for instance, the customer or project name).For generic exceptions raised by the bundled GDB used by UDB, extra details based on the exception message can be included.
The exception message itself is never included as it could contain sensitive information.
module_path (string or null)
The path to the module where the exception was raised, relative to UDB’s top-level directory,
__builtins__
for builtin exceptions, ornull
if the module is outside the UDB installation, as that could contain sensitive information.chained_relationship (string)
Whether the exception is the one caught by the UDB Python code, or an exception related to that.
Possible values are:
"caught"
: This is the exception that was caught by the UDB error handling code. This value is used for the first exception in the list of exceptions."cause"
: This exception is the direct cause of the previous exception in the list. This corresponds to information aboutexc
in the Python coderaise NewExceptionType("...") from exc
. See BaseException.__cause__ for details."context"
: This exception was being handled when the previous exception in the list was raised. See BaseException.__context__ for details.
traceback (list of objects)
A list of frames in the traceback leading to the exception.
path (string or null)
The path, relative to UDB’s top-level directory, to the file where the frame is located, or
null
if the path is outside the UDB installation, as that could contain sensitive information.name (string)
The name of the location where the frame is located. This is typically the name of the function in the traceback or a string like
"<module>"
for code not in functions.line_number (integer)
The line number in the file where the frame is located.
duration (elapsed seconds as floating point number)
How long the command took to complete, in seconds.
bbcount_delta (integer or null)
The difference, in BBs, between the time before and after the execution of this command.
A positive number denotes a movement forward in time, a negative number a movement backward in time, and
0
means that the time was not changed. This value isnull
if there’s no execution history before or after the command execution (for instance, the debugged program was not running).time_since_previous_command (elapsed seconds as floating point number)
The inactivity time before this command.
That is, the time between the invocation of this command and the end of the previous command’s execution. Or, if this is the first executed command after UDB started, the time since startup.
Note that some commands are not tracked in usage data due to technical reasons or because they are not useful commands to track. These untracked commands are ignored by this measurement.
time_inactive_before_quit (elapsed seconds as floating point number or null)
The inactivity time between the last command and UDB quitting.
Can be
null
if UDB doesn’t quit properly (e.g. in case of crash).loaded_recordings (list of objects)
List where each item contains information about an Undo recording that was loaded by UDB.
Each object in the list contains the following keys:
wallclock_start (date and time as string)
The UTC wall-clock time at the start of recorded history.
Example:
"2023-08-01T15:05:35.123456"
wallclock_end (date and time as string)
The UTC wall-clock time at the end of recorded history.
Example:
"2023-08-01T15:35:01.654321"
recording_undo_version (string)
The version of the Undo Engine used to produce this recording.
recording_size_bytes (integer)
The size of the recording, in bytes.
recording_application_uid (string or null)
The UID of the license used to create the recording.
uuids (dictionary mapping string to string)
Random identifiers for the recording.
Currently, the following identifiers are stored:
save
: A random identifier which changes every time an Undo recording of a process is saved. This identifies a single recording. Can benull
for old recordings.run
: A random identifier which persists even if multiple Undo recordings are saved. Multiple recordings with differentsave
identifiers can share a singlerun
identifier. Can benull
for old recordings.shmem_log
: A random identifier for the log of shared memory accesses if Multi-Process Correlation for Shared Memory is enabled.null
otherwise.
Example:
{ "save": "22859b9a-526e-46ea-a1e4-c8f6eed8c41a", "run": "179ccc3a-6014-40e1-8171-33f6d4d97ee9", "shmem_log": null }
recording_arch (string)
The architecture of the recorded process.
Valid values are
"x64"
for Linux AMD/Intel x86-64 CPUs,"x32"
for Linux Intel i386 CPUs, and"arm64"
for ARMv8 AArch64 CPUs.This can be different from the value of
record_machine.arch
, for instance, if the recorded process is a 32-bit process running on a 64-bit machine.Example:
"x64"
New in version 8.0.0.
record_machine (object)
Information about the machine on which the recording was created.
New in version 8.0.0.
arch (string)
The CPU architecture of the machine.
Valid values are
"x64"
for Linux AMD/Intel x86-64 CPUs, and"arm64"
for ARMv8 AArch64 CPUs.Example:
"x64"
page_size (integer or null)
The size of a memory page, in bytes, or
null
if the page size is unknown.Example:
4096
load_metrics (dictionary mapping string to object)
A mapping from the name of a metric related to the loading of this recording, to a description of that metric.
Each value in the dictionary is an object containing the following keys:
size (integer)
A measure of the size of the data processed, typically a count of bytes.
duration (elapsed seconds as floating point number or null)
How long it took to complete, or
null
if not available.
restored_session (object or null)
Information about what was restored from a UDB session, or
null
if there is no saved session.New in version 7.1.0.
bookmarks_count (integer)
How many bookmarks were restored.
time_changed (boolean)
Whether restoring the session led to the time in execution history being changed.
undo_redo_stack_count (integer)
How many items were restored into the stack used by the ugo undo and ugo redo commands.
breakpoints_restored (boolean)
Whether breakpoints were restored. This can be false when running under IDEs as they have their own breakpoint saving/restoring system.
breakpoints_count (integer)
How many breakpoints are listed in the session file. This doesn’t necessarily mean that the breakpoints were restored; something could have gone wrong or restoring of breakpoints may have been disabled (see the
breakpoints_restored
field).time_limits_set (boolean)
Whether any time limit was restored.
telemetry_id (string or null)
The telemetry ID of the user who created the session file. For session state files loaded via the usession import command, this is the ID of the user who performed the corresponding usession export command. For sessions restored automatically, it is the ID of the current user.
The telemetry ID is a randomly-generated UUID that is preserved across runs of UDB by the same user on the same machine. This is used to identify the same user across UDB sessions without revealing the user’s identity or personal data.
Example:
"bc8bbbcf-2e97-4de9-9f83-28e556433735"
New in version 7.2.0.
point_recording (boolean)
Whether the recording is a point recording.
New in version 7.1.0.
save_stop_code (integer)
Number of the stop code that describes why the recording was saved.
The special value
-1
is used if the stop code is invalid/unknown.New in version 7.1.0.
undo_tool (string or null)
The name of the Undo tool that was used to create the recording, or
null
if unknown.Example:
"live-record"
New in version 7.2.0.
config (dictionary mapping string to anything)
Configuration parameters (with non-default values) set when the recording was generated.
The Undo Engine has several configuration parameters, some corresponding to command-line options or environment variables that users can set, others for internal use. The
config
dictionary contains a small subset of these parameters. The included parameters are useful, for instance, to know which features were enabled or if the configuration could have affected performance.Example:
{ "parameter_foo": True, "parameter_bar": 42 }
New in version 7.2.0.
update_count (integer)
Count of the number of times the recording was updated (for example, using
undo recording-update
) since it was originally created.New in version 7.2.0.
failed_recording_loads (list of objects)
List where each item contains information about an Undo recording that UDB attempted to load but failed.
New in version 7.3.0.
Each object in the list contains the following keys:
recording_undo_version (string or null)
The version of the Undo Engine used to produce this recording.
recording_size_bytes (integer or null)
The size of the recording, in bytes.
recording_application_uid (string or null)
The UID of the license used to create the recording.
uuids (dictionary mapping string to string or null)
Random identifiers for the recording.
Currently, the following identifiers are stored:
save
: A random identifier which changes every time an Undo recording of a process is saved. This identifies a single recording. Can benull
for old recordings.run
: A random identifier which persists even if multiple Undo recordings are saved. Multiple recordings with differentsave
identifiers can share a singlerun
identifier. Can benull
for old recordings.shmem_log
: A random identifier for the log of shared memory accesses if Multi-Process Correlation for Shared Memory is enabled.null
otherwise.
Example:
{ "save": "22859b9a-526e-46ea-a1e4-c8f6eed8c41a", "run": "179ccc3a-6014-40e1-8171-33f6d4d97ee9", "shmem_log": null }
recording_arch (string or null)
The architecture of the recorded process, or
null
if it couldn’t be determined.Valid values are
"x64"
for Linux AMD/Intel x86-64 CPUs,"x32"
for Linux Intel i386 CPUs, and"arm64"
for ARMv8 AArch64 CPUs.This can be different from the value of
record_machine.arch
, for instance, if the recorded process is a 32-bit process running on a 64-bit machine.Example:
"x64"
New in version 8.0.0.
record_machine (object or null)
Information about the machine on which the recording was created, or
null
if it couldn’t be determined.New in version 8.0.0.
arch (string)
The CPU architecture of the machine.
Valid values are
"x64"
for Linux AMD/Intel x86-64 CPUs, and"arm64"
for ARMv8 AArch64 CPUs.Example:
"x64"
page_size (integer or null)
The size of a memory page, in bytes, or
null
if the page size is unknown.Example:
4096
exception_type (string)
The name of the Python exception associated with the load failure.
This is the same as
exceptions[0].name
, but is included here as well for convenience.Example:
"IncompatibleArchitectureLoadError"
expected_error (boolean)
true
if the failure resulted from an expected error condition, for instance if the recording couldn’t be loaded because its version is too new or because it’s damaged.false
if the failure results from an unexpected error condition.stop_code_name (string or null)
The name of the stop code reported by the Engine, or
null
if not available.Stop codes are the way the Engine reports the reason why load or execution of a process stopped.
Example:
"LOAD_FAILED"
errno (integer or null)
An error number associated with the failure, or
null
if not available.This can be either a POSIX error number, or where available, an internal Undo Engine extended error. These values are not publicly documented.
missing_isaexts (list of strings)
The list of missing CPU features that caused the load to fail, if any.
Example:
["avx", "avx2", "sse", "xsave"]
missing_avx512_instrs (dictionary mapping string to list of strings)
The missing AVX-512 instructions that caused the load to fail, if any.
Each item maps from an instruction mnemonic to the set of operand types for that instruction that cannot be emulated.
Example:
{"KORTESTD": ["mask", "regs"], "VMOVDQU8": ["mask", "mem"], "VPMINUB": ["regs"]}
local (boolean)
true
if UDB tried to load the recording on machine it was running on.false
if UDB tried to load the recording remotely via a replay service.will_retry_remotely (boolean)
Whether UDB will try to load the recording remotely using a replay service.
This can be
true
only iflocal
istrue
.exceptions (list of objects)
Information about the Python exception that caused the failure (the first element of the list), and any further chained exceptions.
New in version 8.0.0.
Each object in the list contains the following keys:
name (string or null)
For builtin exceptions, and exceptions defined by UDB or one of its packages, this is the name of the exception. Otherwise, this is
null
as the exception name could contain sensitive information (for instance, the customer or project name).For generic exceptions raised by the bundled GDB used by UDB, extra details based on the exception message can be included.
The exception message itself is never included as it could contain sensitive information.
module_path (string or null)
The path to the module where the exception was raised, relative to UDB’s top-level directory,
__builtins__
for builtin exceptions, ornull
if the module is outside the UDB installation, as that could contain sensitive information.chained_relationship (string)
Whether the exception is the one caught by the UDB Python code, or an exception related to that.
Possible values are:
"caught"
: This is the exception that was caught by the UDB error handling code. This value is used for the first exception in the list of exceptions."cause"
: This exception is the direct cause of the previous exception in the list. This corresponds to information aboutexc
in the Python coderaise NewExceptionType("...") from exc
. See BaseException.__cause__ for details."context"
: This exception was being handled when the previous exception in the list was raised. See BaseException.__context__ for details.
traceback (list of objects)
A list of frames in the traceback leading to the exception.
path (string or null)
The path, relative to UDB’s top-level directory, to the file where the frame is located, or
null
if the path is outside the UDB installation, as that could contain sensitive information.name (string)
The name of the location where the frame is located. This is typically the name of the function in the traceback or a string like
"<module>"
for code not in functions.line_number (integer)
The line number in the file where the frame is located.
distro (dictionary mapping string to anything)
Information about the GNU/Linux distribution used to run UDB.
This information is determined using the Python distro package. In particular, this dictionary is the value returned by the distro.info(best=True) function.
Example:
{ "id": "ubuntu", "like": "debian", "codename": "jammy", "version": "22.04.3", "version_parts": { "major": "22", "minor": "04", "build_number": "3" } }
crash_logs (dictionary mapping string to string)
Anonymized crash logs (if any component crashed or failed due to an assertion error).
Keys are the name of the log file (containing the name of the crashed component and the process ID) and values are the crash logs’ text.
The crash logs contain the Undo Engine backtrace and, in case of assertion failure, the format string for the assertion message (but not its values). This means that crash logs never contain information about the user or the debugged program.
Example (simplified and formatted in Python-like syntax for readability):
{ "undo_crash_log_123_udbserver.log": """ ************************************************************** Fatal error: invalid foo %d in "%s" Location: src/apps/udbserver/server.cpp:251:ensure_session [123:123] ************************************************************** frame 0: frame=0x7fff7477e500 pc=0x44e054 debug_backtrace+0xb4 [debug_libunwind.c:42:debug_backtrace] frame 1: frame=0x7fff7477ee10 pc=0x44df8c debug_dump_telemetry_crash_log+0x18c [debug_crash_log.c:75 (discriminator 1):debug_dump_telemetry_crash_log] frame 2: frame=0x7fff7477ee80 pc=0x461d31 s_handle_error+0xf1 [error.c:197:s_handle_error] frame 3: frame=0x7fff7477eef0 pc=0x4620dd error_handle_vpanic+0x1d [error.c:239:error_handle_vpanic] frame 4: frame=0x7fff7477ef10 pc=0x4621e8 error_handle_panic+0x78 [error.c:260:error_handle_panic] frame 5: frame=0x7fff7477eff0 pc=0x4111c0 _ZN6Server14ensure_sessionEP8Debuggee.part.45+0x3f0 [server.cpp:251:_ZN6Server14ensure_sessionEP8Debuggee] frame 6: frame=0x7fff7477f020 pc=0x40b6b0 _ZL5main2R12ServerConfigiPPcPb.constprop.112+0x410 [main.cpp:1094:_ZL5main2R12ServerConfigiPPcPb.constprop.112] frame 7: frame=0x7fff7477f210 pc=0x4069f2 main+0x192 [main.cpp:1267:main] """, }
imported_sessions (list of objects)
Information about session state files imported via the usession import command.
New in version 7.2.0.
bookmarks_count (integer)
How many bookmarks were restored.
time_changed (boolean)
Whether restoring the session led to the time in execution history being changed.
undo_redo_stack_count (integer)
How many items were restored into the stack used by the ugo undo and ugo redo commands.
breakpoints_restored (boolean)
Whether breakpoints were restored. This can be false when running under IDEs as they have their own breakpoint saving/restoring system.
breakpoints_count (integer)
How many breakpoints are listed in the session file. This doesn’t necessarily mean that the breakpoints were restored; something could have gone wrong or restoring of breakpoints may have been disabled (see the
breakpoints_restored
field).time_limits_set (boolean)
Whether any time limit was restored.
telemetry_id (string or null)
The telemetry ID of the user who created the session file. For session state files loaded via the usession import command, this is the ID of the user who performed the corresponding usession export command. For sessions restored automatically, it is the ID of the current user.
The telemetry ID is a randomly-generated UUID that is preserved across runs of UDB by the same user on the same machine. This is used to identify the same user across UDB sessions without revealing the user’s identity or personal data.
Example:
"bc8bbbcf-2e97-4de9-9f83-28e556433735"
New in version 7.2.0.
post_failure_logging_options (object or null)
Information about the options used for the Post Failure Logging tool
undo log
.null
unless that tool was run.New in version 7.2.0.
standard_streams (boolean)
Whether the user requested the recorded process’s standard output and standard error. See the
--standard-streams
command-line option.New in version 7.2.0.
net_promoter_score (integer or null)
The Net Promoter Score (NPS) entered by the user, if the user was asked to insert one,
-1
if the user was asked by they didn’t responde, ornull
if the user wasn’t asked.Collection of this score is enabled/disabled using the set net-promoter-score command.
New in version 7.3.0.
Changed in version 8.0.0: The value is now
-1
if the user was asked but didn’t respond. It used to benull
in previous versions.symbol_index_cache (object)
To make loading programs or recordings faster, UDB uses a cache to store information about symbol files. This field contains information about the effectiveness of the cache.
New in version 7.3.0.
enabled (boolean)
Whether the symbol index cache is enabled or not.
UDB enables the cache by default, but it can be disabled with the
set index-cache enabled off
command.hits (integer)
How many cache hits occurred in this session (that is, since the launch of UDB).
misses (integer)
How many cache misses occurred in this session (that is, since the launch of UDB).
displayed_contextual_hints (list of strings)
The IDs of contextual hints shown to the user during the session.
Contextual hints are messages that provide information about UDB features based on the current usage. Each hint is identified by an internal ID.
Example (after showing a hint about using ugo start instead of reverse-continue to reach the start of execution history):
["ugo-start-instead-of-reverse-continue"]
New in version 8.0.0.
ab_testing_choices (dictionary mapping string to dictionary mapping string to anything)
Information about settings which, if not explicitly enabled/disable by users, are randomly chosen per user.
Experimental features may be shown to randomly selected users only. The selection is made once per user and persists across restarts of UDB. We use this data to evaluate the effectiveness of new features, and whether they help our users to use UDB more effectively.
Each key in the dictionary is the name of a feature. Each value is a dictionary with the following keys:
enabled_by_user
:true
if the feature is explicitly enabled by the user,false
if disabled by the user, ornull
if the user hasn’t made a choice.enabled_by_ab_testing
:true
if the feature is enabled for A/B testing,false
if disabled for A/B testing. Ifenabled_by_user
isnull
, this value is used to determine the feature’s state; otherwise, it doesn’t affect the behaviour of UDB.enabled
:true
if the feature is enabled,false
if disabled. This is set to the value ofenabled_by_user
if notnull
, and to the value ofenabled_by_ab_testing
otherwise.
Example:
{ "prompt_hints": { "enabled_by_ab_testing": true, "enabled_by_user": null, "enabled": "true" } }
New in version 8.0.0.
consent_actions (list of objects)
A list of actions related to consent to share usage statistics. Each entry represents either a prompt related to usage statistics shown to the user, or an invocation of the set share-usage-statistics command.
New in version 8.0.0.
reason (string)
The reason for this entry.
Valid values are:
"initial"
: The user was prompted for consent to share usage statistics for the first time since they installed UDB on their machine."ask-again-for-full-sharing"
: The user, who previously refused to share full usage data, was prompted again for consent to share it."reconfirm-full-sharing"
: The user, who previously accepted to share full usage data, was prompted again to ensure they are still happy to share this data."policy-change"
: The user was prompted because the privacy policy changed."command"
: The user (or an IDE responding to the user’s input) invoked the set share-usage-statistics licensing-only|anonymized|on command.
value_before (string)
Which usage statistics were shared with Undo before the action represented by this entry.
Possible values are the same as the arguments to the set share-usage-statistics licensing-only|anonymized|on command.
value_after (string)
Which usage statistics were shared with Undo after the action represented by this entry.
If this value differs from
value_before
, the user changed that setting.Possible values are the same as the arguments to the set share-usage-statistics licensing-only|anonymized|on command.
user_made_a_choice (boolean)
Whether the user made a choice, for instance by replying to a prompt shown by UDB or by executing the set share-usage-statistics licensing-only|anonymized|on command.
extra (dictionary mapping string to anything)
Field for arbitrary data that scripts not officially part of UDB can use to collect usage statistics.
This is useful, for instance, for our addons or for scripts implementing experimental features which are not yet part of UDB.
Example:
{ "feature_foo": { "did_bar": true, "did_baz": false } }
update_sharing (object or null)
Set when the user changes the usage statistics sharing setting, so that the server can update its data. Otherwise,
null
.For example, if the user decides to change the share-usage-statistics setting from its default of
anonymized
toon
, then this object will be non-null
. Once UDB receives this JSON object, it creates a relationship between the value of thetelemetry_id
field (from the additional usage data), and the values of thelicense
andusername
fields (from the licensing data). This means that it’s now possible to correlate usage statistics from the separate licensing and additional usage data.If the user then decides to revoke consent via set share-usage-statistics anonymized, the fields of the
update_sharing
object are set accordingly and, once the server receives this JSON object, the link betweentelemetry_id
andlicense
/username
is broken making the two sets of data independent again.For some evaluation licenses, consent to sharing full usage data is given at download time and cannot be revoked without stopping the evaluation. In these cases, this field is always set, the
value
key is always set toon
, and therequired_by_license
key is set totrue
.If not
null
, this object contains the following keys:value (string)
The sharing setting chosen by the user.
See the set share-usage-statistics command for a list of possible values.
Example:
"anonymized"
required_by_license (boolean)
Whether
value
being set toon
is required by the license. See the description ofupdate_sharing
for details.New in version 7.1.1.
time (date and time as string)
The time when this setting was changed. This is included to avoid race conditions if the user changes the usage statistics sharing setting in separate UDB processes running at the same time.
Example:
"2023-08-10T16:12:00.112233"