[Evolution-hackers] Handy GObject debugging trick



Long ago and cubicle far, far away I wrote this little debugging
enhancement for GObject that collects statistics about instance
creation, destruction, etc. by class type and then prints a nicely
formatted report when piped through a tool named 'gobject-stats'.

My proposal for it got kinda hijacked and veered off into something even
fancier involving systemtap (it all kinda went over my head), so I don't
expect my patch to ever actually land in upstream GLib.

Nevertheless, I had occasion to wish for this feature again recently so
I dusted off my original patch and rebased it for GLib 2.28.

Here's the link (comment #46):
https://bugzilla.gnome.org/show_bug.cgi?id=354457#c45

Thought others might find it handy so I'm mentioning it.


How to use it:

1. Build GLib with debugging features enabled (--enable-debug).
   Unstable GLib releases turn debugging features on by default,
   stable releases turn debugging features off by default.

2. GOBJECT_DEBUG=types $MY_APPLICATION 2>&1 | gobject-stats

3. Do stuff in $MY_APPLICATION, then quit.

4. Read the stats to see how badly $MY_APPLICATION is leaking objects.


Here's a sample run I did on e-calendar-factory 2.91.92:

$ GOBJECT_DEBUG=types e-calendar-factory 2>&1 | gobject-stats

Instance Type                       Max Population  # Created  # Destroyed  # Leaked
----------------------------------  --------------  ---------  -----------  --------
GParamBoolean                                   35         35            0        35
EGdbusCalViewStub                               30         30            0        30
GParamObject                                    27         27            0        27
GParamString                                    22         22            0        22
ECalBackendSExp                                 21         39           23        16
GParamEnum                                      16         16            0        16
ESourceGroup                                    16         16            4        12
GParamPointer                                   11         11            0        11
GParamUInt                                      11         11            0        11
GParamBoxed                                     10         10            0        10
ESource                                         16         16           10         6
EDataServerModule                                6          6            0         6
GParamInt                                        6          6            0         6
GParamFlags                                      5          5            0         5
ESourceList                                      4          4            1         3
GParamULong                                      3          3            0         3
GParamGType                                      2          2            0         2
GSimpleAsyncResult                               7        675          674         1
GDBusMessage                                     4        452          451         1
GSocket                                          2         13           12         1
GCancellable                                     2          8            7         1
GDBusAuth                                        1          2            1         1
GDBusConnection                                  1          2            1         1
GIOPConnection                                   2          2            1         1
GSocketInputStream                               1          2            1         1
GSocketOutputStream                              1          2            1         1
GUnixConnection                                  1          2            1         1
GUnixSocketAddress                               1          2            1         1
ECalBackendCalDAVEventsFactory                   1          1            0         1
ECalBackendCalDAVMemosFactory                    1          1            0         1
ECalBackendCalDAVTodosFactory                    1          1            0         1
ECalBackendContactsEventsFactory                 1          1            0         1
ECalBackendFileEventsFactory                     1          1            0         1
ECalBackendFileJournalFactory                    1          1            0         1
ECalBackendFileTodosFactory                      1          1            0         1
ECalBackendGroupwiseEventsFactory                1          1            0         1
ECalBackendGroupwiseJournalFactory               1          1            0         1
ECalBackendGroupwiseTodosFactory                 1          1            0         1
ECalBackendHttpEventsFactory                     1          1            0         1
ECalBackendHttpMemosFactory                      1          1            0         1
ECalBackendHttpTodosFactory                      1          1            0         1
ECalBackendWeatherEventsFactory                  1          1            0         1
EGdbusBookFactoryProxy                           1          1            0         1
GConfClient                                      1          1            0         1
GThreadedResolver                                1          1            0         1
ECalComponent                                  196        263          263         0
GDataOutputStream                                1        250          250         0
GMemoryOutputStream                              1        248          248         0
GDataInputStream                                 1        206          206         0
GMemoryInputStream                               1        204          204         0
GDBusMethodInvocation                            3        150          150         0
EDataCalView                                    10         30           30         0
GInetSocketAddress                               1         27           27         0
GInetAddress                                     4         19           19         0
GSocketClient                                    1         13           13         0
GTcpConnection                                   1         11           11         0
SoupAddressAddressEnumerator                     1         11           11         0
SoupConnection                                   1         11           11         0
SoupSocket                                       1         11           11         0
EDataCal                                         6          6            6         0
EGdbusCalStub                                    6          6            6         0
EList                                            6          6            6         0
SoupMessage                                      1          6            6         0
EIntervalTree                                    5          5            5         0
GCredentials                                     2          4            4         0
SoupAddress                                      3          3            3         0
ECalBackendCalDAV                                2          2            2         0
ECalBackendFileStore                             2          2            2         0
EFileCache                                       2          2            2         0
EProxy                                           2          2            2         0
GDBusAuthMechanismExternal                       1          2            2         0
GSocketAddressAddressEnumerator                  1          2            2         0
GUnixCredentialsMessage                          1          2            2         0
SoupAuthBasic                                    2          2            2         0
SoupAuthManagerNTLM                              2          2            2         0
SoupSessionSync                                  2          2            2         0
EBook                                            1          1            1         0
ECalBackendContacts                              1          1            1         0
ECalBackendFileEvents                            1          1            1         0
ECalBackendFileJournal                           1          1            1         0
ECalBackendFileTodos                             1          1            1         0
EDataCalFactory                                  1          1            1         0
EGdbusCalFactoryStub                             1          1            1         0
EOfflineListener                                 1          1            1         0
GIOPServer                                       1          1            1         0




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