weston: add wait-for-debugger option

When you need to start Weston via weston-launch, systemd unit, or any
other runner, it is annoying to try to get in with a debugger,
especially if the thing you are interested in happens at start-up. To
make it easy, a new option is introduced.

The new option, implemented both as a command line option and a
weston.ini option, raises SIGSTOP early in the start-up, before the
weston_compositor has been created. This allows one to attach a debugger
at a known point in execution, and resume execution with SIGCONT.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Acked-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Reviewed-by: Ian Ray <ian.ray@ge.com>
dev
Pekka Paalanen 7 years ago
parent 3baf9ce7e8
commit 1fdeb68013
  1. 13
      compositor/main.c
  2. 8
      man/weston.ini.man
  3. 8
      man/weston.man

@ -557,6 +557,7 @@ usage(int error_code)
" --log=FILE\t\tLog to the given file\n" " --log=FILE\t\tLog to the given file\n"
" -c, --config=FILE\tConfig file to load, defaults to weston.ini\n" " -c, --config=FILE\tConfig file to load, defaults to weston.ini\n"
" --no-config\t\tDo not read weston.ini\n" " --no-config\t\tDo not read weston.ini\n"
" --wait-for-debugger\tRaise SIGSTOP on start-up\n"
" -h, --help\t\tThis help message\n\n"); " -h, --help\t\tThis help message\n\n");
#if defined(BUILD_DRM_COMPOSITOR) #if defined(BUILD_DRM_COMPOSITOR)
@ -1787,6 +1788,7 @@ int main(int argc, char *argv[])
struct weston_seat *seat; struct weston_seat *seat;
struct wet_compositor user_data; struct wet_compositor user_data;
int require_input; int require_input;
int32_t wait_for_debugger = 0;
const struct weston_option core_options[] = { const struct weston_option core_options[] = {
{ WESTON_OPTION_STRING, "backend", 'B', &backend }, { WESTON_OPTION_STRING, "backend", 'B', &backend },
@ -1800,6 +1802,7 @@ int main(int argc, char *argv[])
{ WESTON_OPTION_BOOLEAN, "version", 0, &version }, { WESTON_OPTION_BOOLEAN, "version", 0, &version },
{ WESTON_OPTION_BOOLEAN, "no-config", 0, &noconfig }, { WESTON_OPTION_BOOLEAN, "no-config", 0, &noconfig },
{ WESTON_OPTION_STRING, "config", 'c', &config_file }, { WESTON_OPTION_STRING, "config", 'c', &config_file },
{ WESTON_OPTION_BOOLEAN, "wait-for-debugger", 0, &wait_for_debugger },
}; };
if (os_fd_set_cloexec(fileno(stdin))) { if (os_fd_set_cloexec(fileno(stdin))) {
@ -1863,6 +1866,16 @@ int main(int argc, char *argv[])
section = weston_config_get_section(config, "core", NULL, NULL); section = weston_config_get_section(config, "core", NULL, NULL);
if (!wait_for_debugger)
weston_config_section_get_bool(section, "wait-for-debugger",
&wait_for_debugger, 0);
if (wait_for_debugger) {
weston_log("Weston PID is %ld - "
"waiting for debugger, send SIGCONT to continue...\n",
(long)getpid());
raise(SIGSTOP);
}
if (!backend) { if (!backend) {
weston_config_section_get_string(section, "backend", &backend, weston_config_section_get_string(section, "backend", &backend,
NULL); NULL);

@ -181,6 +181,14 @@ require an input device for launch
sets Weston's pageflip timeout in milliseconds. This sets a timer to exit sets Weston's pageflip timeout in milliseconds. This sets a timer to exit
gracefully with a log message and an exit code of 1 in case the DRM driver is gracefully with a log message and an exit code of 1 in case the DRM driver is
non-responsive. Setting it to 0 disables this feature. non-responsive. Setting it to 0 disables this feature.
.TP 7
.BI "wait-for-debugger=" true
Raises SIGSTOP before initializing the compositor. This allows the user to
attach with a debugger and continue execution by sending SIGCONT. This is
useful for debugging a crash on start-up when it would be inconvenient to
launch weston directly from a debugger. Boolean, defaults to
.BR false .
There is also a command line option to do the same.
.SH "LIBINPUT SECTION" .SH "LIBINPUT SECTION"
The The

@ -165,6 +165,14 @@ Weston will export
.B WAYLAND_DISPLAY .B WAYLAND_DISPLAY
with this value in the environment for all child processes to allow them to with this value in the environment for all child processes to allow them to
connect to the right server automatically. connect to the right server automatically.
.TP
\fB\-\-wait-for-debugger\fR
Raises SIGSTOP before initializing the compositor. This allows the user to
attach with a debugger and continue execution by sending SIGCONT. This is
useful for debugging a crash on start-up when it would be inconvenient to
launch weston directly from a debugger. There is also a
.IR weston.ini " option to do the same."
.
.SS DRM backend options: .SS DRM backend options:
See See
.BR weston-drm (7). .BR weston-drm (7).

Loading…
Cancel
Save