【问题标题】:What is lldb's equivalent one of gdb's advance command?lldb 相当于 gdb 的高级命令之一是什么?
【发布时间】:2022-01-11 19:11:20
【问题描述】:

在调试C/C++函数的时候,参数很多,而且每个参数可能仍然调用一些函数,人们不得不重复输入stepfinish,然后到达这个函数的主体部分。

例如我正在使用 OpenCV 的 solvePnP() 函数,它需要很多参数:

    solvePnP(v_point_3d,v_point_2d,K,D,R,T);

其中,每个参数都会从cv::Mat转换为cv::InputArray,从而调用init()函数。

我的预期是,直接去solvePnP()实现的地方,我对每个参数类型转换都不感兴趣。

幸运的是,gdb 中有advance 命令。官方文档是here,写道:

提前定位

继续运行程序直到给定位置。需要一个参数,它应该是指定位置中描述的一种形式。执行也将在退出当前堆栈帧时停止。这个命令和until类似,但是advance不会跳过递归函数调用,而且目标位置不必和当前位置在同一帧内。

这个 gdb advance 命令真的很有帮助。 LLDB 中的等效命令是什么?

我在lldb官方的gdb => lldb命令映射网页中搜索,https://lldb.llvm.org/use/map.html,但没有找到。


编辑:我忘了提,我的 gdb 用法是

(gdb) b main
(gdb) r
(gdb) advance solvePnP

【问题讨论】:

标签: c++ gdb lldb


【解决方案1】:

检查 lldb 的 sif 命令。 sif 表示 **Step Into Function

参考:How to step-into outermost function call in the line with LLDB?

要获取LLDB所有支持的命令,首先要进入lldb命令,然后输入help,然后会有sif的解释:

sif -- 单步执行当前块,如果您直接单步进入名称与 TargetFunctionName 匹配的函数,则停止。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2012-04-02
    • 2017-01-08
    • 2012-08-25
    • 2011-10-11
    • 1970-01-01
    • 2019-12-18
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多