On Tue, Jul 24, 2012 at 02:23:11PM +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 Typo: ^^^^^^^^ watches Can you explain in the commit log how it will be launched, and with which arguments it will get started? Looks good otherwise 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 8f9339c..a3c1b4d 100644 > --- a/src/Makefile.am > +++ b/src/Makefile.am > @@ -155,6 +155,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.10.4 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
pgpSqhQifRbaN.pgp
Description: PGP signature