|
发表于 2008-1-8 12:45:36
|
显示全部楼层
我的pigdin就是显示不出来fetion,我调试了pidgin发现是g_module_open()没有成功,请大侠们看看我的调试步骤
[code]
Breakpoint 2, purple_plugins_probe (ext=0xb789efe4 "so") at plugin.c:1344
1344 plugin = purple_plugin_probe(path);
(gdb) p path
$43 = (gchar *) 0x8143800 "/usr/local/lib/purple-2/libfetion.so"
(gdb) s
purple_plugin_probe (filename=0x8143800 "/usr/local/lib/purple-2/libfetion.so")
at plugin.c:207
207 purple_debug_misc("plugins", "probing %s\n", filename);
(gdb) n
208 g_return_val_if_fail(filename != NULL, NULL);
(gdb) p filename
$44 = 0x8143800 "/usr/local/lib/purple-2/libfetion.so"
(gdb) n
210 if (!g_file_test(filename, G_FILE_TEST_EXISTS))
(gdb) n
214 basename = purple_plugin_get_basename(filename);
(gdb) n
215 plugin = purple_plugins_find_with_basename(basename);
(gdb) p basename
$45 = (gchar *) 0x8143848 "libfetion"
(gdb) n
216 g_free(basename);
(gdb) p *plugin
Cannot access memory at address 0x0
(gdb) p plugin
$46 = (PurplePlugin *) 0x0
(gdb) n
215 plugin = purple_plugins_find_with_basename(basename);
(gdb) n
216 g_free(basename);
(gdb) p *plugin
Cannot access memory at address 0x0
(gdb) p plugin
$47 = (PurplePlugin *) 0x0
(gdb) n
217 if (plugin != NULL)
(gdb) n
239 plugin = purple_plugin_new(has_file_extension(filename, G_MODULE_SUFFIX), filename);
(gdb) n
241 if (plugin->native_plugin) {
(gdb) p *plugin
$48 = {native_plugin = 1, loaded = 0, handle = 0x0,
path = 0x81438c0 "/usr/local/lib/purple-2/libfetion.so", info = 0x0,
error = 0x0, ipc_data = 0x0, extra = 0x0, unloadable = 0,
dependent_plugins = 0x0, _purple_reserved1 = 0, _purple_reserved2 = 0,
_purple_reserved3 = 0, _purple_reserved4 = 0}
(gdb) n
255 plugin->handle = g_module_open(filename, G_MODULE_BIND_LOCAL);
(gdb) n
260 if (plugin->handle == NULL)
(gdb) n
255 plugin->handle = g_module_open(filename, G_MODULE_BIND_LOCAL);
(gdb) nn
Undefined command: "nn". Try "help".
(gdb) n
260 if (plugin->handle == NULL)
(gdb) n
262 const char *error = g_module_error();
(gdb) n
263 if (error != NULL && purple_str_has_prefix(error, filename))
(gdb) n
262 const char *error = g_module_error();
(gdb) n
263 if (error != NULL && purple_str_has_prefix(error, filename))
(gdb) n
275 if (error == NULL || !*error)
(gdb) n
283 plugin->error = g_strdup(error);
(gdb) n
284 purple_debug_error("plugins", "%s is not loadable: %s\n",
(gdb) p plugin->error
$49 = 0x0
(gdb) n
283 plugin->error = g_strdup(error);
(gdb) n
284 purple_debug_error("plugins", "%s is not loadable: %s\n",
(gdb) n
288 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
(gdb) n
293 if (plugin->handle == NULL)
(gdb) n
288 plugin->handle = g_module_open(filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
(gdb) n
293 if (plugin->handle == NULL)
(gdb) n
331 purple_plugin_destroy(plugin);
(gdb) n
496 }
(gdb) n
purple_plugins_probe (ext=0xb789efe4 "so") at plugin.c:1346
1346 g_free(path);
(gdb) Quit
(gdb) quit
The program is running. Exit anyway? (y or n) y
debian:~#
[code] |
|