1

我有一个带有子目录项目的项目/源代码树,如下所示:

Qt Creator - 项目源代码树

这个想法是exec(测试)项目是从op(共享对象)库项目进行调用 - 两者都是由根项目gviewer管理的子项目。

尽管将gviewer项目设置为调试(使用 GCC x86_64),但无论何时我尝试从op构建中进入构造函数或类方法/函数,调试器都会立即吐出反汇编。我一直很难弄清楚问题是否出在项目设置上(我已经看过并且无法确定可以更改哪个设置来解决问题)调试器设置中的问题(也是看了),或者项目文件发生了什么。

common.pri文件包含在 op.pro 中。

在查看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

执行程序

INCLUDEPATH += ../

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle qt

SOURCES += main.cpp

LIBS += -L../op -lop

DESTDIR_TARGET = ../../

一些进一步的图像:

exec : 入口点 - main.cpp

主要入口点

opstep into : 反汇编 - 调用后没有加载源
op::Log::OpenFile(...)

拆卸

调试器源路径- 在这里摆弄路径,没有这样的运气;虽然我不确定我是否正确使用它

调试设置 - 源路径

4

2 回答 2

1

在你的 .pro 文件中,你有这个:

LIBS += -L../op -lop

如果我理解你的话,这就是你链接你有问题的库的地方。但是,您应该链接它的两个版本,调试版本用于项目的调试版本,发布版本用于项目的发布版本。我不知道您使用的是什么操作系统,但这里有一个示例供您参考,以便您了解:

unix:CONFIG(release): LIBS += -L$$PWD/../../Filters/release/ -lFilters
unix:CONFIG(debug): LIBS += -L$$PWD/../../Filters/debug/ -lFilters

请注意,如果当前项目正在构建为发布版本,则第一行链接发布库,如果当前项目正在构建为调试版本,则第二行链接调试库版本。

于 2013-02-11T07:47:28.877 回答
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

where/path/to/release|debug/folder的位置与源|项目文件目录处于同一级别,并且-lLibrary是要链接的二进制库,位于指定-L...路径中。

于 2013-02-11T23:44:53.927 回答