我制作了一个工程,在vscode下断点是正常的;但一切都不变,在cursor下,断点不停,总是自动停在main的最后一句。
种种迹象表明,编译出来的版本是正常的,但断点信息 并没有正确地通过vscode remote配置给gdb.
比较了这两个vscode的版本,差距很小,只差几周。
反复研究没有进展,然后我想到清空tmp大法。
清空了/tmp下的所有的文件。
然后,把所有的断点,在 cursor这边全去了,是所有的,一个也不留,单run一次,然后再下断就OK了。
相关的一些信息如下:
launch.json
{"version": "0.2.0","configurations": [{"name": "C++ Debug","type": "cppdbg","request": "launch","program": "${workspaceFolder}/build/bin/usereventtest","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "build","miDebuggerPath": "/usr/bin/gdb","windows": {"program": "${workspaceFolder}/build/bin/Debug/usereventtest.exe","miDebuggerPath": "gdb.exe"},"linux": {"program": "${workspaceFolder}/build/bin/usereventtest"},"osx": {"program": "${workspaceFolder}/build/bin/usereventtest","MIMode": "lldb"}}]
}
task.json
{"version": "2.0.0","tasks": [{"label": "cmake configure","type": "shell","command": "cmake","args": ["-B","${workspaceFolder}/build","-S","${workspaceFolder}","-DCMAKE_BUILD_TYPE=Debug"],"group": "build"},{"label": "build","type": "shell","command": "cmake","args": ["--build","${workspaceFolder}/build","--config","Debug","--parallel"],"group": {"kind": "build","isDefault": true},"dependsOn": ["cmake configure"],"problemMatcher": ["$gcc","$msCompile"]}]
}
CMakeList.txt
主要是这两句:
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -g3 -O0”)
cmake_minimum_required(VERSION 3.10)
project(usereventtest VERSION 1.0)# Specify C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# Debug configuration
set(CMAKE_BUILD_TYPE Debug)# Add debug flags
#if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3 -O0")
#elseif(MSVC)
# set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi")
#endif()# Add source files
set(SOURCESsrc/main.cppslottrace/SlotTrace.cppgnb/GnbConfig.cppthread/Thread.cppthread/PhyThread.cpp
)# Include directories
include_directories(${PROJECT_SOURCE_DIR}/include${PROJECT_SOURCE_DIR}/slottrace${PROJECT_SOURCE_DIR}/gnb${PROJECT_SOURCE_DIR}/thread
)# Find Threads package
find_package(Threads REQUIRED)# Create executable
add_executable(usereventtest ${SOURCES})# Link against threads library
target_link_libraries(usereventtest PRIVATE Threads::Threads)# Set output directories
set_target_properties(usereventtest PROPERTIESRUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
)
去除断点的操作
其实我有些怀疑是这个插件出了什么。
tmp清空的来源
[1] + Done “/usr/bin/gdb” --interpreter=mi --tty=${DbgTerm} 0<“/tmp/Microsoft-MIEngine-In-jb4ghd3j.x4y” 1>“/tmp/Microsoft-MIEngine-Out-rzc3iya4.frk”
小结
可能清空tmp大法,并没有什么用处。关键还是手工先删除所有的断点。然后clean,重编