无法获取要解析的 lldb 位置

Cannot get lldb location to resolve

我正在尝试使用 cmake 和 lldb 从命令行进行编译和调试。我不确定为什么这不起作用:

cmake_minimum_required (VERSION 2.6)
project (etest)
include_directories(src)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -g")
add_executable(etest src/m.cpp)
set_property(TARGET etest PROPERTY CXX_STANDARD 14)
set_property(TARGET etest PROPERTY CXX_STANDARD_REQUIRED ON)

然后:

~/Desktop/em2 cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/jbake/Desktop/em2
~/Desktop/em2 make
[ 50%] Building CXX object CMakeFiles/etest.dir/src/m.cpp.o
[100%] Linking CXX executable etest
[100%] Built target etest
~/Desktop/em2 lldb etest 
(lldb) target create "etest"
Current executable set to 'etest' (x86_64).
(lldb) b src/m.cpp:7
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) breakpoint list
Current breakpoints:
1: file = 'src/m.cpp', line = 7, locations = 0 (pending)

我认为 -g 选项对于将调试位置添加到可执行文件以用于 lldb 是必需的,但我已经尝试了数小时的各种调整,但无法解决任何问题。我错过了什么?

lldb 中存在一个错误,这意味着您要么必须仅使用文件名设置断点,要么必须使用调试信息中记录的完整路径。部分路径应该可以工作,但目前不行。

如果您的构建系统会四处移动文件或通过符号链接引用它们,则使用完整路径会很棘手。然后你必须得到编译器拼写的路径。您可以通过以下方式找到它:

(lldb) break set -f JustTheName.cpp -l 10

然后获取设置断点的地址,然后执行:

(lldb) image lookup -v -a <BREAK_ADDRESS>

此输出的 CompileUnit 部分中的文件将是调试信息中拼写的路径。