作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
enter image description here
我想在buf_中打印Buffer成员变量,换句话说,
我想p *(tensorflow::Buffer*)buf_
打印类Buffer中的成员变量。
tensorflow中的代码1.10.1。
类关系:TensorBuffer类是tensor.h中的基类,Buffer是tensor.cc中的模板和派生类
以下是lldb的输出:
frame #0: 0x0000000175abffc0
723 CHECK_NOTNULL(a);
724 if (shape_.num_elements() > 0 || a->ShouldAllocateEmptyTensors()) {
725 CASES(type, buf_ = new Buffer<T>(a, shape.num_elements()));
-> 726 }
(lldb) p buf_
(tensorflow::TensorBuffer *) $17 = 0x00007fd91e927c40
(lldb) p *(Buffer<std::__1::string>*)buf_
error: use of undeclared identifier 'Buffer'
error: expected '(' for function-style cast or type construction
error: expected expression
(lldb) p *(tensorflow::Buffer<std::__1::string>*)buf_
error: no member named 'Buffer' in namespace 'tensorflow'
error: expected '(' for function-style cast or type construction
error: expected expression
switch(type)
case DataTypeToEnum<string>::value :
{
typedef string T;
buf_ = new Buffer<T>(a, shape.num_elements(), allocation_attr);
}
最佳答案
是的,这是从调试信息中重构模板类型的问题。 DWARF调试信息格式没有模板的抽象表示。它仅记录实例化的模板(即没有抽象的std::vector<T>
,而只有std::vector<int>
,vector<std::string>
等。
例如,从一堆特定的实例中构造clang进行强制转换所需的基本“std::string”类型,还不是lldb可以教的,而且事实证明这很棘手。
您可以通过针对要打印的类型引入typedef来临时解决此问题,例如:
(lldb) source list -l 1
1 #include <vector>
2 #include <string>
3 #include <stdio.h>
4
5 int
6 main()
7 {
8 using VecType = std::vector<std::string>;
9 std::vector<std::string> my_vec = {"string", "other string"};
10 void *hidden = (void *) &my_vec;
(lldb)
11 VecType *revealed = (VecType *) hidden;
12 return 0;
13 }
14
15
(lldb) expr *(std::vector<std::string> *) hidden
error: no member named 'vector' in namespace 'std'
error: expected '(' for function-style cast or type construction
error: expected expression
(lldb) expr *(VecType *) hidden
(VecType) $0 = size=2 {
[0] = "string"
[1] = "other string"
(lldb) expr *(VecType *) hidden
error: use of undeclared identifier 'VecType'
关于c++ - 我想通过lldb打印张量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58534094/
我是一名优秀的程序员,十分优秀!