【发布时间】:2022-01-11 19:11:20
【问题描述】:
在调试C/C++函数的时候,参数很多,而且每个参数可能仍然调用一些函数,人们不得不重复输入step和finish,然后到达这个函数的主体部分。
例如我正在使用 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
【问题讨论】:
-
检查 lldb 的
sif命令。参考:stackoverflow.com/questions/56436965/…