将指针强制转换为lldb中的类型

时间:2018-05-04 03:43:17

标签: c++ pointers casting lldb

我想调试第三方c ++ lib,是否可以将指针强制转换为可打印类型?

我试过了

(lldb) expr static_cast<AGInfo*>(0x0000002fcdccc060)

但显示错误

error: cannot cast from type 'long' to pointer type 'mxnet::Imperative::AGInfo *'

有没有办法做到这一点?

由于

1 个答案:

答案 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表达式解析器中工作。