无法获得lldb位置来解决

时间:2016-05-18 19:28:33

标签: cmake lldb

我正在尝试使用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一起使用是必要的,但是我已经尝试了几个小时的各种调整并且无法解决任何问题。我错过了什么?

1 个答案:

答案 0 :(得分:1)

lldb中存在一个错误,意味着您必须使用JUST文件名设置断点,或者必须使用调试信息中记录的完整路径。部分路径应该有效,但目前不行。

如果您有一个构建系统可以移动文件或通过符号链接引用它们,那么使用完整路径是很棘手的。然后你必须得到拼写到编译器的路径。你可以这样做:

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

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

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

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