跳过直到循环在 lldb 中完成
Step over until loop finished in lldb
有没有办法在 lldb 中继续直到循环结束?我正在寻找 finish
的类似物,但它不是跳出堆栈帧,而是跳出循环。
for (int i = 0; i < 10000000; i++) {
...
//say I'm here
}
//and I want to go here.
调试器没有足够的信息来识别循环或其他类似的流控制概念。它们没有反映在调试信息中,并且调试器不知道如何按照最初构建的方式编译源代码(包括正确获取所有#defines 和反映您编译器版本的代码生成特性)实际使用的),它需要这样做才能忠实地将源文本映射到说明。
所以它没有任何办法为你处理这种操作。
您可以手动完成此操作。一种方法是设置一个临时断点并在那里设置 运行。例如,如果 "I want to go here" 语句是第 25 行,您可以说:
(lldb) break set -o -l 25
(lldb) c
另一个捷径是:
(lldb) thread until 25
thread until
优于设置临时断点并继续,它还在当前函数的 return 上设置了一个后备器,所以如果您错过了循环执行 return(或 - 颤抖 - 转到...)当函数退出时我们将在某处停止而不是继续。
有没有办法在 lldb 中继续直到循环结束?我正在寻找 finish
的类似物,但它不是跳出堆栈帧,而是跳出循环。
for (int i = 0; i < 10000000; i++) {
...
//say I'm here
}
//and I want to go here.
调试器没有足够的信息来识别循环或其他类似的流控制概念。它们没有反映在调试信息中,并且调试器不知道如何按照最初构建的方式编译源代码(包括正确获取所有#defines 和反映您编译器版本的代码生成特性)实际使用的),它需要这样做才能忠实地将源文本映射到说明。
所以它没有任何办法为你处理这种操作。
您可以手动完成此操作。一种方法是设置一个临时断点并在那里设置 运行。例如,如果 "I want to go here" 语句是第 25 行,您可以说:
(lldb) break set -o -l 25
(lldb) c
另一个捷径是:
(lldb) thread until 25
thread until
优于设置临时断点并继续,它还在当前函数的 return 上设置了一个后备器,所以如果您错过了循环执行 return(或 - 颤抖 - 转到...)当函数退出时我们将在某处停止而不是继续。