C++ 在这种情况下如何调试动态库

C++ 在这种情况下如何调试动态库,c++,debugging,cmake,C++,Debugging,Cmake,嗯,我是新来的。 我有以下文件结构 haze_removal |---build |---bin | |--Test | |--CMakeLists.txt |---lib | |--libtools.so |---include | |--tools.hpp |---test | |--main.cpp | |--CMakeLists.txt |---sr

嗯,我是新来的。 我有以下文件结构

    haze_removal
    |---build
    |---bin
    |    |--Test
    |    |--CMakeLists.txt
    |---lib
    |    |--libtools.so
    |---include
    |    |--tools.hpp
    |---test
    |    |--main.cpp
    |    |--CMakeLists.txt
    |---src
    |    |--tools.cpp
    |    |--CMakeLists.txt
    |---CMakeLists.txt
libtools.so是从
。/src/tools.cpp
构建的。我使用以下cmake命令在
。/build
中构建整个项目:

cmake-DCMAKE\u BUILD\u TYPE=Debug。。
制作
测试是从
。/Test/main.cpp
我成功地建立了这个项目。但是当我使用
gdb./Test调试测试时,我不能跳过libtools.so中的函数。
这些是来自不同目录的my
CMakeLists.txt

haze\u removation/

    cmake_minimum_required(VERSION 2.8)
    project(haze_removal)

    # find needed package
    find_package(OpenCV REQUIRED)

    # library directory
    add_subdirectory(src)

    # test
    add_subdirectory(test)
。/src/

    # generate dynamic library
    # add source file, include directories
    aux_source_directory(. TOOLS_SRC)
    include_directories(${PROJECT_SOURCE_DIR}/include)

    # generate
    add_library(tools SHARED ${TOOLS_SRC})

    # set output directory and lib's name
    set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    set_target_properties(tools PROPERTIES OUTPUT_NAME "tools")

    # link library
    target_link_libraries(tools ${OpenCV_LIBS})
。/test/

    # add source file, include directories, link directories
    aux_source_directory(. EXE_SRC)
    include_directories(${PROJECT_SOURCE_DIR}/include)
    link_directories(${PROJECT_SOURCE_DIR}/lib)

    # generate
    add_executable(Test ${EXE_SRC})

    # set output directory
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

    # link libraries
    target_link_libraries(Test ${OpenCV_LIBS} libtools.so)

我的问题是如何调试来自libtools的函数。

好吧,我发现了为什么即使我设置了
CMAKE\u BUILD\u TYPE=debug
也不能进入动态库。因为在我将构建模型设置为Debug之前,我曾经设置
CMAKE\u build\u TYPE=Release
。更改构建模型后,我没有删除
build
目录中的文件

我不知道上述解释是否正确,但我确实解决了我的问题


谢谢

我不确定如何加载动态库,因为我看不到您的项目的任何源。我猜你的动态数据库的符号没有加载。也许你可以告诉gdb这样做。对不起,这是
libtools。所以
我不能跳过。我刚才在上一个问题上犯了一个错误,我已经改正了。