我有一个带有子目录项目的项目/源代码树,如下所示:
这个想法是 exec (测试)项目是从 op (共享对象)库项目调用 - 两者都是由管理的子项目根项目 gviewer 。
尽管将 gviewer 项目设置为Debug(使用GCC x86_64),但只要我尝试从 op 构建步入构造函数或类方法/函数,调试器将立即吐出反汇编。我一直很难弄清楚问题是否是项目设置(我已经看过了,并且无法弄清楚哪些设置可以更改以解决问题)调试器设置中的问题(也看了),或者项目文件正在发生的事情。
op.pro。
包含common.pri
文件
在查看here之后,在尝试在调试时加载符号时尝试各种视图,我得出的结论是我做错了。这是否是GDB调试配置问题,.pro
文件问题或QtCreator问题超出了我的范围。
如果这里的任何人都有使用内部项目库(在本例中为共享对象)加载调试符号的经验,那么所提供的任何见解都将受到赞赏。感谢。
项目文件:
gviewer.pro
TEMPLATE = subdirs
SUBDIRS = \
source/op
CONFIG += ordered
SUBDIRS += source/exec
common.pri
INCLUDEPATH += . ..
TEMPLATE = lib
CONFIG -= qt app_bundle
NO_ERR_FLAGS = -Wno-write-strings -Wno-return-type -Wno-unused-parameter
debug:QMAKE_CXXFLAGS_DEBUG += -Wall -Werror -std=c++11 $$NO_ERR_FLAGS -g
DEFINES += OP_DEBUG OP_PLATFORM_X86
LIBS += -lGL -lGLU -lGLEW -lglfw
op.pro
! include(../common.pri) {
error( Couldn't find the common.pri file! )
}
HEADERS += \
debug/glout.hpp \
math/matrix.hpp \
math/math.hpp \
math/glm_incl.hpp \
io/log.hpp
SOURCES += \
debug/glout.cpp \
math/matrix.cpp \
io/log.cpp
exec.pro
INCLUDEPATH += ../
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle qt
SOURCES += main.cpp
LIBS += -L../op -lop
DESTDIR_TARGET = ../../
进一步的图片:
exec :入口点 - main.cpp
op :反汇编 - 调用step into
后未加载任何来源
在op::Log::OpenFile(...)
调试器源路径 - 摆弄这里的路径,没有这样的运气;虽然我不确定我是否正确使用了这个
答案 0 :(得分:1)
在你的.pro文件中你有这个:
LIBS += -L../op -lop
如果我理解得很好,那么您就可以链接您遇到问题的图书馆了。但是,您应该链接它的两个版本,项目的调试版本的调试版本,以及项目发布版本的发行版本。我不知道你有什么操作系统,但这里有一个例子给你,所以你可以得到这个想法:
unix:CONFIG(release): LIBS += -L$$PWD/../../Filters/release/ -lFilters
unix:CONFIG(debug): LIBS += -L$$PWD/../../Filters/debug/ -lFilters
请注意,如果当前项目正在构建为release,则第一行链接发布库,如果当前项目构建为debug,则第二行链接调试库版本。
答案 1 :(得分:0)
作为对已接受答案的补充,值得注意的是,如果用户的配置使用Shadow Building,我们可以将配置重新命名为:
unix:CONFIG(release): LIBS += -L$$PWD/../../path/to/release/folder/ -lLibrary
unix:CONFIG(debug): LIBS += -L$$PWD/../../path/to/debug/folder/ -lLibrary
其中/path/to/release|debug/folder
的位置与源项目文件目录位于同一级别,-lLibrary
是要链接的二进制库,它位于指定的-L...
路径中。