[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [virt-tools-list] [PATCH virt-viewer 4/6] windows: add debug-helper



On Sat, Oct 20, 2012 at 12:57:29AM +0200, Marc-André Lureau wrote:
> This is a simple program that will set some debug variable, and run
> gdb and wait until it finished. This makes it possible to debug
> "remote-viewer --spice-controller" easily, by setting the necessary
> variables and keeping the parent process running (the activex whatches
> its death)

'watches'
How do you use this helper? Do you just run it, and then run 'something' that
talks to the controller? Or is it possible to get it to be started by
spice-activex and used when asking for an ovirt console?
Patch looks good.

Christophe

> ---
>  src/Makefile.am    |  5 ++++
>  src/debug-helper.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 75 insertions(+)
>  create mode 100644 src/debug-helper.c
> 
> diff --git a/src/Makefile.am b/src/Makefile.am
> index a62a8c0..fc357d3 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -157,6 +157,11 @@ virt-viewer_rc.$(OBJEXT): $(VIRT_VIEWER_RES) $(ICONDIR)/virt-viewer.ico
>  		-i $< -o $@
>  LDADD += virt-viewer_rc.$(OBJEXT)
>  MAINTAINERCLEANFILES += virt-viewer_rc.$(OBJEXT)
> +
> +bin_PROGRAMS += debug-helper
> +debug_helper_SOURCES = debug-helper.c
> +debug_helper_LDFLAGS = $(GLIB2_LIBS) -Wl,--subsystem,windows
> +debug_helper_CFLAGS = $(GLIB2_CFLAGS)
>  endif
>  
>  -include $(top_srcdir)/git.mk
> diff --git a/src/debug-helper.c b/src/debug-helper.c
> new file mode 100644
> index 0000000..754f7cf
> --- /dev/null
> +++ b/src/debug-helper.c
> @@ -0,0 +1,70 @@
> +#include <windows.h>
> +#include <stdio.h>
> +#include <conio.h>
> +#include <process.h>
> +#include <glib.h>
> +
> +static gchar*
> +get_program_path(void)
> +{
> +    gchar *utf8_buf, *path = NULL;
> +    wchar_t buf[MAX_PATH+1];
> +
> +    if (GetModuleFileNameW(GetModuleHandle (NULL), buf, G_N_ELEMENTS (buf)) > 0) {
> +        utf8_buf = g_utf16_to_utf8 (buf, -1, NULL, NULL, NULL);
> +        path = g_path_get_dirname (utf8_buf);
> +        g_free (utf8_buf);
> +    }
> +
> +    return path;
> +}
> +
> +int
> +main(int argc, char *argv[])
> +{
> +    char pipe[2048];
> +    STARTUPINFO si = { 0, };
> +    PROCESS_INFORMATION pi = { 0, };
> +    gchar *program_path = get_program_path();
> +    gchar *command;
> +    int rv = 0;
> +
> +    argv[0] = "gdb -ex run --args";
> +    command = g_strjoinv(" ", argv);
> +
> +    snprintf(pipe, sizeof(pipe), "\\\\.\\pipe\\SpiceController-%lu", GetCurrentProcessId());
> +
> +    SetEnvironmentVariable("SPICE_DEBUG", "1");
> +    SetEnvironmentVariable("G_MESSAGES_DEBUG", "all");
> +    SetEnvironmentVariable("SPICE_XPI_NAMEDPIPE", pipe);
> +
> +    si.cb = sizeof(si);
> +    if (!CreateProcess(NULL,
> +                       command,
> +                       NULL,
> +                       NULL,
> +                       FALSE,
> +                       0,
> +                       NULL,
> +                       program_path,
> +                       &si,
> +                       &pi)) {
> +        printf("CreateProcess failed (%ld).\n", GetLastError());
> +        rv = 1;
> +        goto end;
> +    }
> +
> +    // Wait until child process exits
> +    WaitForSingleObject(pi.hProcess, INFINITE);
> +
> +    // Close process and thread handles
> +    CloseHandle(pi.hProcess);
> +    CloseHandle(pi.hThread);
> +
> +end:
> +    g_free(program_path);
> +    g_free(command);
> +
> +    exit(rv);
> +    return rv;
> +}
> -- 
> 1.7.11.7
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list redhat com
> https://www.redhat.com/mailman/listinfo/virt-tools-list

Attachment: pgpZ3SCpEWJRH.pgp
Description: PGP signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]