首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将调试符号添加到Audacious?

如何将调试符号添加到Audacious?
EN

Stack Overflow用户
提问于 2009-10-15 19:17:59
回答 2查看 1.3K关注 0票数 0

我正在为audacious编写一个插件,并且我遇到了随机的段错误。我环顾四周,发现我可以用gdb处理程序的核心转储。

所以我这样做了,我得到了这个输出:

http://pastebin.com/m7d0d663d

正如你所看到的,它说任何地方都没有调试符号。我想用调试符号来编译audacious,但我不确定如何编译。我尝试编辑configure,它只包含一个名为buildsys.mk的文件,因此我对其进行了编辑,并从链接器中删除了-s标志,并确保将-g标志传递给编译器。上面的gdb输出是在我这样做之后的,所以很明显我所做的没有效果。

那么,如何在编译audacious时保留调试符号呢?问题是我只写了一个小插件,还没有掌握那些大胆的代码。

更新:我为gtk+和glib添加了调试符号(还尝试了CFLAGS=-g选项),并分析了几个核心转储。底线是:

代码语言:javascript
复制
(gdb) bt
#0  gtk_text_iter_make_real (_iter=<value optimized out>) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c:202
#1  0xb7c1cf5e in _gtk_text_iter_get_any_segment (iter=0x0) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c:474
#2  0xb7c24cd6 in IA__gtk_text_layout_get_line_display (layout=0x93a4318, line=0x9af6270, size_only=1) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:2196
#3  0xb7c29172 in gtk_text_layout_real_wrap (layout=0x93a4318, line=0x9af6270, line_data=0xb10036b8) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:1147
#4  0xb7c2358f in IA__gtk_text_layout_wrap (layout=0x93a4318, line=0x9af6270, line_data=0x0) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:693
#5  0xb7c060a1 in _gtk_text_btree_validate_line (tree=0x9407370, line=0x9af6270, view_id=0x93a4318) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextbtree.c:5422
#6  0xb7c27dc1 in IA__gtk_text_layout_validate_yrange (layout=0x93a4318, anchor=0xbfb0e624, y0=0, y1=635) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextlayout.c:1062
#7  0xb7c34999 in gtk_text_view_validate_onscreen (text_view=0x9406000) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextview.c:3502
#8  0xb7c35f85 in gtk_text_view_flush_first_validate (text_view=0x9406000) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextview.c:3558
#9  0xb7c35fde in first_validate_callback (data=0x9406000) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextview.c:3577
#10 0xb79c88fb in gdk_threads_dispatch (data=0x9bce910) at /build/buildd/gtk+2.0-2.16.1/gdk/gdk.c:498
#11 0xb7e38c81 in g_idle_dispatch (source=0x938a400, callback=0, user_data=0x9bce910) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:3922
#12 0xb7e3ab88 in IA__g_main_context_dispatch (context=0x9250760) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:1814
#13 0xb7e3e0eb in g_main_context_iterate (context=0x9250760, block=1, dispatch=1, self=0x92333e8) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:2448
#14 0xb7e3e5ba in IA__g_main_loop_run (loop=0x9a92c88) at /build/buildd/glib2.0-2.20.1/glib/gmain.c:2656
#15 0xb7b707d9 in IA__gtk_main () at /build/buildd/gtk+2.0-2.16.1/gtk/gtkmain.c:1205
#16 0xb268d56a in skins_init () from /usr/local/lib/audacious/General/skins.so
#17 0x0805b42a in ?? ()
#18 0xb7540775 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
#19 0x08055361 in ?? ()
(gdb)

确切的错误是:

代码语言:javascript
复制
#0  gtk_text_iter_make_real (_iter=<value optimized out>) at /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c:202
202 /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c: No such file or directory.
in /build/buildd/gtk+2.0-2.16.1/gtk/gtktextiter.c

确切的行是这样的:

代码语言:javascript
复制
if (iter->segments_changed_stamp !=

有人能从中学到什么吗?:-\

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-16 06:19:42

虽然这样做是真的:

代码语言:javascript
复制
./configure CFLAGS=-g && make && make install

代码语言:javascript
复制
make CFLAGS=-g

会得到一个带有调试符号的版本,但这不太可能帮助你解决这个问题。

你的程序在/usr/lib/libgtk-x11-2.0.so.0中崩溃了,而不是在audacious2中(不管是什么)。您也错误地分析了corelist在那个阶段是没有意义的。在分析核心时,您的第一个(gdb)命令应该几乎总是where,然后是thread apply all where

您还可以通过安装libgtk2-debuginfo或其他类似的包获得更好的结果,这些包应该提供libgtk-x11-2.0.so.0的调试信息,并允许您在崩溃点查看libgtk中的源代码和变量。

票数 1
EN

Stack Overflow用户

发布于 2009-10-15 21:27:02

据我所知,大胆使用自动工具。不需要修改任何东西,只需使用以下配置:

代码语言:javascript
复制
CFLAGS="-g $CFLAGS" ./configure

接下来是安装它的一般步骤。这些标志是存储的(我想是在config.status中),因此任何后续调用都将构建一个启用调试的audacious。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1574468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档