在Xlib(libX11.so)中是否內置了任何調試選項?我可以得到X11 lib調用列表嗎?xlib集成調試(追蹤)
我想從重多線程的閉源程序中獲得完整的xlib函數調用。這是一個非公開的嵌入式平臺,所以我不能使用gdb進行多線程調試,並且平臺上沒有ltrace。 此外,此程序無法通過tcp/ip連接到x服務器,只能使用unix-socket。我想從xlib本身跟蹤xlib調用。
PS。 Xlib來自相當現代的xfree甚至xorg。從GNU Linux的
在Xlib(libX11.so)中是否內置了任何調試選項?我可以得到X11 lib調用列表嗎?xlib集成調試(追蹤)
我想從重多線程的閉源程序中獲得完整的xlib函數調用。這是一個非公開的嵌入式平臺,所以我不能使用gdb進行多線程調試,並且平臺上沒有ltrace。 此外,此程序無法通過tcp/ip連接到x服務器,只能使用unix-socket。我想從xlib本身跟蹤xlib調用。
PS。 Xlib來自相當現代的xfree甚至xorg。從GNU Linux的
您可能會研究xlibtrace,它會在Xlib和您的代碼之間的接口處追蹤,而不是X Windows線路協議。我已經執行了幾個例子,它似乎工作。
源可在http://kev.pulo.com.au/xlibtrace
我不得不修改它得到它來編譯:
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函數調用嗎? xscope是否包含在默認的xfree - x.org中?哪些版本? – osgx 2010-02-28 21:58:54
Wireshark與xscope一樣,解碼X協議請求,而不是庫函數調用。 X.Org提供xscope,但並非所有分銷商都將其包含在其包裝中。 (由於X11R7.0,X.Org分別分發每個應用程序,並讓構建者決定包含哪些應用程序,所以現在還沒有真正的「默認X.Org」,沒有人真正使用XFree86。) – alanc 2010-03-01 19:00:14
有一個很多的Linux發行版,其中一些很久沒有更新:) – osgx 2010-03-05 08:04:56