Gdb xlib集成调试(跟踪)

Gdb xlib集成调试(跟踪),gdb,x11,xlib,xorg,Gdb,X11,Xlib,Xorg,Xlib(libX11.so)中有内置的调试选项吗?我可以得到X11库调用的列表吗 我想从重多线程、封闭源代码程序中获取xlib函数调用的完整跟踪。它不是一个公共的嵌入式平台,所以我不能使用gdb进行多线程调试,并且平台上没有ltrace。 此外,该程序不能通过tcp/ip连接到x服务器,只能通过unix套接字连接。我想从xlib本身跟踪xlib调用 ps.Xlib来自相当现代的xfree甚至xorg。在gnu linux中,您可能可以使用来监视通过Unix套接字发送的请求,即使您无法通过TCP

Xlib(libX11.so)中有内置的调试选项吗?我可以得到X11库调用的列表吗

我想从重多线程、封闭源代码程序中获取xlib函数调用的完整跟踪。它不是一个公共的嵌入式平台,所以我不能使用gdb进行多线程调试,并且平台上没有ltrace。 此外,该程序不能通过tcp/ip连接到x服务器,只能通过unix套接字连接。我想从xlib本身跟踪xlib调用


ps.Xlib来自相当现代的xfree甚至xorg。在gnu linux中,您可能可以使用来监视通过Unix套接字发送的请求,即使您无法通过TCP发送X协议,也可以使用网络监视工具,例如。

您可以查看xlibtrace,它跟踪Xlib和代码之间的接口,而不是X Windows wire协议。我已经执行了几个示例,它似乎很有效

资料来源可于

我必须修改它以使其编译:

diff -u src/libxlibtrace-functions.h.sh.orig src/libxlibtrace-functions.h.sh
--- src/libxlibtrace-functions.h.sh.orig    2009-01-19 23:43:46.000000000 -0500
+++ src/libxlibtrace-functions.h.sh 2016-02-24 13:49:25.155556294 -0500
@@ -81,7 +81,7 @@
    return (t ~ /^[cC][oO][nN][sS][tT][     ]/);
 }

-function isarray(t) {
+function our_isarray(t) {
    return (t ~ /\[.*\]$/);
 }

@@ -90,7 +90,7 @@
        return sprintf("%s", t);
    } else if (isfunctionpointer(t)) {
        return gensub("^(.*\\(\\*)(\\).*)$", "\\1"n"\\2", "", t);
-   } else if (isarray(t)) {
+   } else if (our_isarray(t)) {
        return gensub("^(.*)(\\[.*\\])$", "\\1"n"\\2", "", t);
    } else {
        return sprintf("%s %s", t, n);
diff -u src/libxlibtrace-print-x.h.orig src/libxlibtrace-print-x.h
--- src/libxlibtrace-print-x.h.orig 2009-01-19 22:30:06.000000000 -0500
+++ src/libxlibtrace-print-x.h  2016-02-24 14:27:08.681352710 -0500
@@ -2415,6 +2415,20 @@
    dofflush(f);
 })

+// XGenericEventCookie
+#define __REALTYPE_XGenericEventCookie__    XGenericEventCookie
+#define __REALTYPE_XGenericEventCookie_p__  XGenericEventCookie *
+#define __REALTYPE_XGenericEventCookie_pp__ XGenericEventCookie **
+#define __TRACE_PRINT_TYPE_STRUCT_BODY_XGenericEventCookie__(safetype) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, int, type) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, unsigned_long, serial) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, Bool, send_event) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, Display_p, display) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, int, extension) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, int, evtype) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, unsigned_int, cookie) __PRINT_COMMA__(f) \
+   __TRACE_PRINT_STRUCT_MEMBER__(f, safetype, *value, void_p, data)
+__INDIRECT_CALL_3__(__TRACE_PRINT_TYPE_STRUCT,__LIBXLIBTRACE_PRINT_X_SUFF__,__)(XGenericEventCookie)


 #undef __LIBXLIBTRACE_PRINT_X_BODY__

你好wireshark会解码x函数调用吗?默认xfree-x.org中是否包含xscope?哪个版本?Wireshark与xscope一样,解码X协议请求,而不是库函数调用。xscope可从X.Org获得,但并非所有分销商都将其包含在其软件包中。(由于X11R7.0,X.Org单独分发每个应用程序,并让构建者决定要包含哪些应用程序,因此现在没有真正的“默认X.Org”。再也没有人真正使用XFree86了。)有很多linux分发版,其中一些在很长一段时间内没有更新:)