GDB - 未找到调试符号 -
Posted
技术标签:
【中文标题】GDB - 未找到调试符号 -【英文标题】:GDB - No Debugging Symbols Found - 【发布时间】:2016-09-18 17:29:30 【问题描述】:所以我托管了一个 8.6 的 OpenTibia-Server。有时服务器冻结,我不知道是什么原因导致它冻结,所以我请我的朋友帮助我,他告诉我用 gdb 选项编译控制台。我做到了。但是当我在控制台冻结后将它附加到 GDB 时,它说没有找到调试符号。我也添加了选项 -g
和 -s
(第 6 行),但它不起作用。
这是我的 Makefile.am:
noinst_PROGRAMS = theforgottenserver
CXXFLAGS = -pipe -std=gnu++11
AM_CXXFLAGS = $(XML_CPPFLAGS) $(OTSERV_FLAGS) $(LUA_CFLAGS) $(DEBUG_FLAGS)\
$(mysql_FLAGS) $(SQLITE_FLAGS) $(PGSQL_FLAGS) $(PROFILER_FLAGS)\
$(OPTIONAL_FLAGS) -D_THREAD_SAFE -D_REENTRANT -Wall -Wextra -Wno-strict-aliasing -llua5.1 -I/usr/include/lua5.1 -g -s
theforgottenserver_LDADD = $(LUA_LIBS)
if USE_MYSQL
MAYBE_MYSQL = databasemysql.cpp databasemysql.h
endif
if USE_SQLITE
MAYBE_SQLITE = databasesqlite.cpp databasesqlite.h
endif
if USE_PGSQL
MAYBE_PGSQL = databasepgsql.cpp databasepgsql.h
endif
if LOGIN_SERVER
MAYBE_LOGIN = gameservers.cpp gameservers.h
endif
if OT_ADMIN
MAYBE_OTADMIN = admin.cpp admin.h
endif
theforgottenserver_SOURCES = account.h actions.cpp actions.h $(MAYBE_OTADMIN) \
allocator.cpp allocator.h baseevents.cpp baseevents.h beds.cpp \
beds.h chat.cpp chat.h combat.cpp combat.h condition.cpp condition.h \
config.h configmanager.cpp configmanager.h connection.cpp connection.h \
const.h container.cpp container.h creature.cpp creature.h \
creatureevent.cpp creatureevent.h cylinder.cpp cylinder.h database.cpp \
database.h databasemanager.cpp databasemanager.h $(MAYBE_MYSQL) \
$(MAYBE_SQLITE) $(MAYBE_PGSQL) depot.cpp depot.h dispatcher.cpp \
dispatcher.h exception.cpp exception.h fileloader.cpp fileloader.h \
game.cpp game.h $(MAYBE_LOGIN) globalevent.cpp globalevent.h group.cpp \
group.h house.cpp house.h housetile.cpp housetile.h ioban.cpp ioban.h \
ioguild.cpp ioguild.h iologindata.cpp iologindata.h iomap.cpp iomap.h \
iomapserialize.cpp iomapserialize.h item.cpp item.h itemattributes.cpp \
itemattributes.h items.cpp items.h luascript.cpp luascript.h \
mailbox.cpp mailbox.h manager.cpp manager.h map.cpp map.h monster.cpp \
monster.h monsters.cpp monsters.h movement.cpp movement.h \
networkmessage.cpp networkmessage.h npc.cpp npc.h otpch.h otserv.cpp \
otsystem.h outfit.cpp outfit.h outputmessage.cpp outputmessage.h \
party.cpp party.h player.cpp player.h position.cpp position.h \
protocol.cpp protocol.h protocolgame.cpp protocolgame.h \
protocolhttp.cpp protocolhttp.h protocollogin.cpp protocollogin.h \
protocolold.cpp protocolold.h quests.cpp quests.h raids.cpp raids.h \
rsa.cpp rsa.h scheduler.cpp scheduler.h scriptmanager.cpp \
scriptmanager.h server.cpp server.h spawn.cpp spawn.h spells.cpp \
spells.h status.cpp status.h talkaction.cpp talkaction.h teleport.cpp \
teleport.h templates.h textlogger.cpp textlogger.h thing.cpp thing.h \
tile.cpp tile.h tools.cpp tools.h town.h trashholder.cpp trashholder.h \
waitlist.cpp waitlist.h waypoints.h weapons.cpp weapons.h vocation.cpp \
vocation.h
当我附加GDB
并运行bt
时,这是我在终端上得到的
【问题讨论】:
您的屏幕转储显示您将 gdb 附加到“屏幕”进程,而不是您的程序。您将其附加到错误的进程。 我该怎么办? 将 gdb 附加到正确的进程。 清理构建,然后再次构建,查看编译命令的输出,看看是否使用了您期望的标志。 【参考方案1】:我添加了选项 -g 和 -s
-g
选项告诉编译器发出调试信息。
-s
选项告诉链接器删除(剥离)调试信息。你不想要那个选项。
您还需要附加到正确的进程(不是您附加到的screen
)。附加正确的进程后,您需要发出(gdb) thread apply all where
命令,该命令的complete 输出可能允许熟悉 OpenTibia 的人诊断死锁。
注意:您实际上并不需要调试版本的 OpenTibia Server:即使没有调试信息,thread apply all where
的输出也可能指出问题所在。
【讨论】:
以上是关于GDB - 未找到调试符号 -的主要内容,如果未能解决你的问题,请参考以下文章