I am trying to access a low-level tensor and retrieve its member via SystemTap, such as dim() or sizes(). I know the layout of TensorImpl defined in c10/core/TensorImpl.h
but for some reasons, my gdb or stap cannot retrieve its information despite having debug symbols.
I have built PyTorch from the source codes w/ DEBUG=1
and I did verify its symbol via nm -D libtorch_cpu.so
: _ZTIN3c1010TensorImplE, which is a mangled symbol of c10::TensorImpl.
However, when I track this symbol to print its layout, I hit the following error:
(gdb) ptype c10::TensorImpl
No type "TensorImpl" within class or namespace "c10".
I can see other functions as the same way:
(gdb) ptype c10::intrusive_ptr_target
type = class c10::intrusive_ptr_target {
private:
struct std::atomic<unsigned int> refcount_;
struct std::atomic<unsigned int> weakcount_;
protected:
~intrusive_ptr_target();
intrusive_ptr_target();
intrusive_ptr_target(class c10::intrusive_ptr_target &&);
intrusive_ptr_target(const class c10::intrusive_ptr_target &);
class c10::intrusive_ptr_target & operator=(class c10::intrusive_ptr_target &&);
class c10::intrusive_ptr_target & operator=(const class c10::intrusive_ptr_target &);
private:
virtual void release_resources();
}
So, I am quite confused why this is not accessible despite its symbol. If there is no symbol then I get it becasue it may be stripped way from optimization flags; yet, having symbols and not showing its internal layout does not make sense to me.