我想调试第三方c ++ lib,是否可以将指针强制转换为可打印类型?
我试过了
(lldb) expr static_cast<AGInfo*>(0x0000002fcdccc060)
但显示错误
error: cannot cast from type 'long' to pointer type 'mxnet::Imperative::AGInfo *'
有没有办法做到这一点?
由于
答案 0 :(得分:1)
lldb使用clang作为其表达式解析器,因此它只需要少量修改即可严格遵守C ++。 clang不允许你在源代码中做你想做的事情:
> cat foo.cpp
struct Something
{
int first;
int second;
};
int
main()
{
Something mySomething = {10, 30};
long ptr_val = (long) &mySomething;
Something *some_ptr = static_cast<Something *>(ptr_val);
return some_ptr->first;
}
> clang++ -g -O0 -o foo foo.cpp
foo.cpp:12:25: error: cannot cast from type 'long' to pointer type 'Something *'
Something *some_ptr = static_cast<Something *>(ptr_val);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
所以它也无法在lldb中工作。
幸运的是,C ++在C风格的转换中不那么严格,所以相同的代码但是:
Something *some_ptr = (Something *) ptr_val;
在实际源代码中编译,并将在lldb表达式解析器中工作。