gdb 单步执行直到退出函数
gdb single stepping until exit from function
我正在从事一个具有以下架构的项目。
sync
|--- CMakeLists.txt
|--- SyncManager
|--- CMakeLists.txt
|--- src
|--- SyncCommon
|--- CMakeLists.txt
|--- src
|--- SyncProcessor
|--- CMakeLists.txt
|--- src
SyncManager 和SyncProcessor 都使用SyncCommon 中的函数。
CMakeLists.txt内容如下
sync/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(sync)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_subdirectory(SyncManager)
add_subdirectory(SyncProcessor)
add_subdirectory(SyncCommon)
sync/SyncManager/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(SyncManager VERSION 2.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0")
file(GLOB project_SRCS src/*.cpp src/*.h)
include_directories(src/ ../SyncCommon/src)
add_executable(syncManager ${project_SRCS})
target_link_libraries(syncManager syncCommon)
sync/SyncCommon/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(ingester VERSION 2.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS " -g -Wall -O2 -w -fpermissive -pthread")
file(GLOB project_SRCS src/*.cpp src/*.h mhmc/*.c mhmc/*.h)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/src/cmake/")
find_package(MYSQL REQUIRED)
find_package(CURL REQUIRED)
add_library(syncCommon STATIC ${project_SRCS})
target_include_directories(syncCommon
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${CURL_INCLUDE_DIRS}
${MYSQL_INCLUDE_DIRS}
)
target_link_libraries(syncCommon ${CURL_LIBRARIES} ${MYSQL_LIBRARY})
sync/SyncProcessor/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(SyncProcessor VERSION 2.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS " -std=c++11 -Wall -O2 -w -g -O0 -fpermissive -pthread")
set(CMAKE_CXX_STANDARD_REQUIRED True)
file(GLOB project_SRCS src/*.cpp src/*.h)
find_package(CURL REQUIRED)
include_directories(src/ ../SyncCommon/src)
add_executable(syncProcessor ${project_SRCS})
target_include_directories(syncProcessor
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${CURL_INCLUDE_DIRS}
)
target_link_libraries(syncProcessor syncCommon ${CURL_LIBRARIES})
现在我正在尝试调试 SyncManager。 SyncCommon 中的函数可以逐步执行。但是当涉及到 SyncManager 中的函数时,我得到了这个错误“单步执行直到退出函数”。我已经将 gdb 更新到最新版本,但仍然无法正常工作。
您的 sync/SyncCommon/CMakeLists.txt
有这个:
set(CMAKE_CXX_FLAGS " -g -Wall -O2 -w -fpermissive -pthread")
您的 sync/SyncManager/CMakeLists.txt
有这个:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0")
file(GLOB project_SRCS src/*.cpp src/*.h)
尽管有 C++
个来源,但您正在使用 C
个标记。您应该同时设置 CMAKE_C_FLAGS
和 CMAKE_CXX_FLAGS
,或者如果您没有任何普通的 C
来源,则只设置后者。
P.S。您还应该摆脱 -fpermissive
和 -w
——而不是修复您的来源,这样 -fpermissive
就不是必需的,并打开 -Wall
——抑制编译器会适得其反警告——您只会花费更长的时间来调试编译器会告诉您的问题。
我正在从事一个具有以下架构的项目。
sync
|--- CMakeLists.txt
|--- SyncManager
|--- CMakeLists.txt
|--- src
|--- SyncCommon
|--- CMakeLists.txt
|--- src
|--- SyncProcessor
|--- CMakeLists.txt
|--- src
SyncManager 和SyncProcessor 都使用SyncCommon 中的函数。 CMakeLists.txt内容如下
sync/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(sync)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_subdirectory(SyncManager)
add_subdirectory(SyncProcessor)
add_subdirectory(SyncCommon)
sync/SyncManager/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(SyncManager VERSION 2.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0")
file(GLOB project_SRCS src/*.cpp src/*.h)
include_directories(src/ ../SyncCommon/src)
add_executable(syncManager ${project_SRCS})
target_link_libraries(syncManager syncCommon)
sync/SyncCommon/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(ingester VERSION 2.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS " -g -Wall -O2 -w -fpermissive -pthread")
file(GLOB project_SRCS src/*.cpp src/*.h mhmc/*.c mhmc/*.h)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/src/cmake/")
find_package(MYSQL REQUIRED)
find_package(CURL REQUIRED)
add_library(syncCommon STATIC ${project_SRCS})
target_include_directories(syncCommon
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${CURL_INCLUDE_DIRS}
${MYSQL_INCLUDE_DIRS}
)
target_link_libraries(syncCommon ${CURL_LIBRARIES} ${MYSQL_LIBRARY})
sync/SyncProcessor/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(SyncProcessor VERSION 2.0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS " -std=c++11 -Wall -O2 -w -g -O0 -fpermissive -pthread")
set(CMAKE_CXX_STANDARD_REQUIRED True)
file(GLOB project_SRCS src/*.cpp src/*.h)
find_package(CURL REQUIRED)
include_directories(src/ ../SyncCommon/src)
add_executable(syncProcessor ${project_SRCS})
target_include_directories(syncProcessor
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${CURL_INCLUDE_DIRS}
)
target_link_libraries(syncProcessor syncCommon ${CURL_LIBRARIES})
现在我正在尝试调试 SyncManager。 SyncCommon 中的函数可以逐步执行。但是当涉及到 SyncManager 中的函数时,我得到了这个错误“单步执行直到退出函数”。我已经将 gdb 更新到最新版本,但仍然无法正常工作。
您的 sync/SyncCommon/CMakeLists.txt
有这个:
set(CMAKE_CXX_FLAGS " -g -Wall -O2 -w -fpermissive -pthread")
您的 sync/SyncManager/CMakeLists.txt
有这个:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0")
file(GLOB project_SRCS src/*.cpp src/*.h)
尽管有 C++
个来源,但您正在使用 C
个标记。您应该同时设置 CMAKE_C_FLAGS
和 CMAKE_CXX_FLAGS
,或者如果您没有任何普通的 C
来源,则只设置后者。
P.S。您还应该摆脱 -fpermissive
和 -w
——而不是修复您的来源,这样 -fpermissive
就不是必需的,并打开 -Wall
——抑制编译器会适得其反警告——您只会花费更长的时间来调试编译器会告诉您的问题。