我目前正在使用lldb调试非常大的应用程序,并且我对某个函数(在此为pthread_create
)的所有调用都感兴趣。我想知道调用堆栈以及所有这些调用的结果,这些结果作为out参数传递。
获得调用栈很简单:
break set pthread_create
break command add 1.1
bt
continue
DONE
但是,我还要打印每次对该函数的调用的结果(最好是在bt
之后)。
实际上,我基本上想替换执行
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
至:
pthread_create
;thread
的值;pthread_create
返回。lldb可以让我这样做吗?
这可以通过添加以下内容来完成:
finish
(aka thread step-out
)] >>script lldb.thread.return_value.unsigned
运行finish
将运行原始的pthread_create
。之后,可以通过lldb.thread.return_value.unsigned
访问返回值。
产生的断点命令将是:
v thread bt finish script lldb.thread.return_value.unsigned continue
[
v thread
打印thread
变量。