WWW-www.enlightenment.org pushed a commit to branch master.

http://git.enlightenment.org/website/www-content.git/commit/?id=90bbcf1f1ea3c1dc32c41a6615ccb6f8449cba02

commit 90bbcf1f1ea3c1dc32c41a6615ccb6f8449cba02
Author: Andrew Williams <[email protected]>
Date:   Fri Oct 20 08:36:06 2017 -0700

    Wiki page enlightenment_debugging changed with summary [refactoring contrib 
pages] by Andrew Williams
---
 pages/debugging/enlightenment_debugging.txt | 239 +---------------------------
 1 file changed, 1 insertion(+), 238 deletions(-)

diff --git a/pages/debugging/enlightenment_debugging.txt 
b/pages/debugging/enlightenment_debugging.txt
index f68da329..c726de5c 100644
--- a/pages/debugging/enlightenment_debugging.txt
+++ b/pages/debugging/enlightenment_debugging.txt
@@ -1,238 +1 @@
-~~Title: Enlightenment debugging~~
-==== Enlightenment Debugging ====
-
-<note important>
-//Please also see [[docs-efl-debug]]. This should probably be merged with this 
page.//
-</note>
-
-This tutorial aims at providing a comprehensive and reproducible documentation 
to debug Enlightenment. It is divided in two sections:
-
-    * [[#Debugging_Enlightenment_using_GDB|GDB]]
-    * [[#Valgrind|Valgrind]]
-
-Before debugging make sure your debug symbols are enabled, if not, go to the 
[[/docs-efl-start#Enable_debug_symbols_Optional|Enable debug symbols]] section.
-
-=== Debugging Enlightenment using GDB ===
-
-In order to use GDB, we will simulate a crash in Enlightenment.
-
-Start by running Enlightenment on a machine. Then switch to another tty 
(CTRL+ALT+F1 for tty1).
-
-At that point, 2 processes are interesting, ''enlightenment'' and 
''enlightenment_start''. Indeed, ''enlightenment'' is traced by 
''enlightenment_start''.
-
-Then setup SEGV to segfault enlightenment.
-
-<code c>
-kill -SIGSEGV $(pidof enlightenment)
-</code>
-
-''enlightenment_start'' will open a pop-up named Enlightenment Error. This 
pop-up indicates that Enlightenment segfaulted and allows to recover or log out 
but also detaches from the child process (Enlightenment) and let advanced users 
use GDB to debug it.
-
-<code bash>
-#gdb on the running enlightenment process
-gdb enlightenment $(pidof enlightenment)
-</code>
-
-After a bit a prompt is available, if you want, you can save the traces in a 
log:
-
-<code bash>
-#save the traces in log.txt
-set logging file log.txt
-set logging on
-</code>
-
-== Backtrace ==
-
-Use the backtrace command to get information about frames to know where the 
segfault is coming from.
-
-<code bash>
-(gdb) bt
-#0  0xb7d539f8 in select () from /lib/tls/libc.so.6
-#1  0xb7dff66a in _XEnq () from /usr/X11R6/lib/libX11.so.6
-#2  0xb7dffa7e in _XRead () from /usr/X11R6/lib/libX11.so.6
-#3  0xb7e01795 in _XReadEvents () from /usr/X11R6/lib/libX11.so.6
-#4  0xb7defa88 in XNextEvent () from /usr/X11R6/lib/libX11.so.6
-#5  0x0809b698 in e_alert_show (
-    text=0x80a34f0 "This is very bad. Enlightenment has segfaulted.\nThis
-    is not meant to happen and is likely a
-    sign of a\nbug in Enlightenment
-    or the libraries it relies on.\n\nYou can gdb attach to this process
-    now to try"...)
-    at e_alert.c:136
-#6  0x0808f706 in e_sigseg_act (x=11, info=0x80a9fb0, data=0x80aa030)
-    at e_signals.c:54
-#7  <signal handler called>
-#8  0xb7d539f8 in select () from /lib/tls/libc.so.6
-#9  0xb7f814ee in _ecore_main_select (timeout=0)
-    at ecore_main.c:338
-#10 0xb7f819ba in _ecore_main_loop_iterate_internal (once_only=0)
-    at ecore_main.c:575
-#11 xb7f81a2b in ecore_main_loop_begin () at ecore_main.c:79
-#12 0x08059bb3 in main (argc=1, argv=0xbffff144) at e_main.c:551
-</code>
-
-As you can see in the stack trace, GDB finds the segfault in libc and pops to 
the main function in e_main. But it doesn't seem credible to have a bug in libc 
or x, the important thing is Enlightenment has its own segfault handler which 
is very explicit on frame 5.
-
-The e_sigseg_act() function at frame 6 is called directly from the kernel when 
the program segfaults, meaning enlightenment causes the segfault. So, the 
segfault comes from the select function (a libc function) at frame 8 called in 
_e_core_main_select_function at frame 9.
-
-== Go in a frame ==
-
-So, the reason of segfault seems to be at frame 9, when ''select'' function is 
called. Let's go to frame 9:
-
-<code bash>
-fr 9
-#9  0xb7f814ee in _ecore_main_select (timeout=0) at ecore_main.c:338
-338        ret = select(max_fd + 1, &rfds, &wfds, &exfds, t);
-(gdb) l
-333               }
-334          }
-335     #ifndef WIN32
-336        if (_ecore_signal_count_get()) return -1;
-337     #endif
-338        ret = select(max_fd + 1, &rfds, &wfds, &exfds, t);
-339        if (ret < 0)
-340          {
-341             if (errno == EINTR) return -1;
-342          }
-</code>
-
-The first command **//fr 9//** gives useful information: name of the file, 
number of the line, the function called, ... The second command **//l//** lists 
the code around the called function. Another useful command allows to print the 
variables, the parameters, helping you to find out the problem, a wrong 
parameter, a null pointer...
-
-<code bash>
-(gdb) p ret
-$1 = -4
-(gdb) p rfds
-$2 = {__fds_bits = {1280, 0 <repeats 31 times>}}
-(gdb) p wfds
-$3 = {__fds_bits = {0 <repeats 32 times>}}
-(gdb) p exfds
-$4 = {__fds_bits = {0 <repeats 32 times>}}
-</code>
-
-GDB is important to start debugging, it will help you to resize the problem 
even if sometimes is not enough.
-
-----
-
-=== Valgrind ===
-
-Valgrind aims at finding memory problems but for that Enlightenment needs to 
be run through Valgrind.
-
-== Prerequisites ==
-
-This tutorial will present 3 different ways to run enlightenment through 
Valgrind:
-
-    * Remote debugging
-    * Xephyr invocation
-    * Xinit invocation
-
-The easiest way is certainly Xephyr because it allows to target a window on a 
X server host, sadly Xephyr doesn't yet support OpenGL and any issue that may 
be related to it will need to use the Xinit version.
-
-== Remote Debugging ==
-
-Enlightenment_start launcher will handle setting up environment variables, 
paths, and launching any other required services before Enlightenment starts. 
Fortunately, there are some options in enlightenment_start that allow to run 
Enlightenment through Valgrind:
-
-<code bash>
-$enlightenment_start --help
-Options:
-    -valgrind[=MODE]
-        Run enlightenment from inside valgrind, mode is OR of:
-           1 = plain valgrind to catch crashes (default)
-           2 = trace children (thumbnailer, efm slaves, ...)
-           4 = check leak
-           8 = show reachable after processes finish.
-         all = all of above
-    -massif
-        Run enlightenment from inside massif valgrind tool.
-    -callgrind
-        Run enlightenment from inside callgrind valgrind tool.
-    -valgrind-log-file=<FILENAME>
-        Save valgrind log to file, see valgrind's --log-f
-</code>
-
-First of all, get the IP address of your host machine and connect to it, then
-on the distant machine, launch X:
-
-<code bash>
-#launch X on tty1
-sudo X -ac :1 &
-</code>
-
-For example, if you want to check leak and save traces in a log file:
-
-<code bash>
-export DISPLAY=:1
-enlightenment_start -valgrind=4 -valgrind-log-file=log.txt
-</code>
-
-At that point, Enlightenment should have started on your host machine. If the 
session is closed then the summary of Valgrind should look like:
-
-<code bash>
-==1488==
-==1488== HEAP SUMMARY:
-==1488==     in use at exit: 4,479,487 bytes in 24,302 blocks
-==1488==   total heap usage: 336,239 allocs, 311,937 frees, 88,068,674 bytes 
allocated
-==1488==
-==1488== LEAK SUMMARY:
-==1488==    definitely lost: 825 bytes in 15 blocks
-==1488==    indirectly lost: 39 bytes in 2 blocks
-==1488==      possibly lost: 384 bytes in 1 blocks
-==1488==    still reachable: 4,478,239 bytes in 24,284 blocks
-==1488==         suppressed: 0 bytes in 0 blocks
-==1488== Rerun with --leak-check=full to see details of leaked memory
-==1488==
-==1488== For counts of detected and suppressed errors, rerun with: -v
-==1488== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
-</code>
-
-== Valgrind Invocation - Xinit ==
-
-Create a file called .xinitrc-debug in your home with the following content:
-
-<code bash>
-#!/bin/sh
-
-ulimit -c unlimited
-
-log_file="$HOME/enlightenment-xinit-debug-valgrind.log"
-#path of you installation
-enlightenment_install_path=/usr/local
-
-#set vars
-LD_LIBRARY_PATH="$enlightenment_install_path/lib"
-PATH="$enlightenment_install_path/bin:$PATH"
-
-#log to file
-echo "using installation at $enlightenment_install_path"
-echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >  $log_file
-echo "PATH=$enlightenment_install_path/bin: ... " >> $log_file
-
-#start e with valgrind
-$enlightenment_install_path/bin/enlightenment_start -valgrind 2>&1 | tee -a 
"$log_file"
-</code>
-
-You can now start a debugging session, after X was closed if it is not the 
case log out:
-
-<code bash>
-/usr/bin/xinit ~/.xinitrc-debug -- :1 -nolisten tcp
-</code>
-
-== Valgrind Invocation - Xephyr ==
-
-Xephyr is a display server implementing the X11 display server protocol which 
targets a window on a X Server host. So, for this it is important that X is 
launched, you can even do it in your usual window manager under X.
-
-Of course, you need to install Xephyr.
-
-<code bash>
-Xephyr -ac -br -noreset -screen 800x600 :1
-</code>
-
-    *ac: disable access control restrictions
-    *br: create root window with black background
-    *noreset: don't reset after last client exists
-    *screen 800x600: Specify screen characteristics
-
-A black screen should now be displayed, and the interesting thing for us is 
that you can launch a window manager on it with Valgrind in addition:
-
-<code bash>
-DISPLAY=:1 enlightenment_start -valgrind
-</code>
\ No newline at end of file
+This page is redirected to [[:contrib:enlightenment_debugging]].
\ No newline at end of file

-- 


Reply via email to