2016-07-01 14 views
3

私はDEBUG=1フラグを使って私のコーヒーを作ります。したがって私はgdbでデバッグすることができました。私はcaffe:gdbを使用してBLOB内のデータにアクセスするにはどうすればよいですか?

./include/caffe/layer.hpp:451

で私のブレークポイントを設定し

gdb --args .build_debug/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt 

私のデバッグプログラムはmnist例でした

これは、関数に対応します。

inline Dtype Layer<Dtype>::Forward(const vector<Blob<Dtype>*>& bottom, 
const vector<Blob<Dtype>*>& top) 

私はこのBLOBのDATAを印刷しようとしていましたが、自分の方法を見つけることができませんでした。

私は何を得ることができることである。

  • 底部と頂部はvvectorsのベクトルです。
(gdb) p bottom 
$30 = std::vector of length 2, capacity 2 = {0x4c24300, 0x4b12fd0} 
(gdb) what bottom 
type = const std::vector<caffe::Blob<float>*, std::allocator<caffe::Blob<float>*> > & 
(gdb) what bottom[0] 
type = std::vector<caffe::Blob<float>*, std::allocator<caffe::Blob<float>*> >::reference 
(gdb) what bottom[0][0] 
type = caffe::Blob<float> 
  • 私はこのブロブ
(gdb) p bottom[0][0] 
$42 = { 
    data_ = { 
    px = 0x4c23710, 
    pn = { 
     pi_ = 0x4c23740 
    } 
    }, 
    diff_ = { 
    px = 0x4c23fc0, 
    pn = { 
     pi_ = 0x4c23ff0 
    } 
    }, 
    shape_data_ = { 
    px = 0x4c23f00, 
    pn = { 
     pi_ = 0x4c23f30 
    } 
    }, 
    shape_ = std::vector of length 2, capacity 2 = {100, 10}, 
    count_ = 1000, 
    capacity_ = 1000 
} 

のメタデータを見つけることができますが、私は、データの取得に失敗しました。私にできる唯一のことは、私はDATA_と、このブロブのdiff_メンバーを印刷することができますどのように

(gdb) p bottom[0][0].data_ 
$43 = { 
    px = 0x4c23710, 
    pn = { 
    pi_ = 0x4c23740 
    } 
} 
(gdb) p bottom[0][0].data_.px[0] 
$44 = { 
    cpu_ptr_ = 0x474fef0, 
    gpu_ptr_ = 0x0, 
    size_ = 4000, 
    head_ = caffe::SyncedMemory::HEAD_AT_CPU, 
    own_cpu_data_ = true, 
    cpu_malloc_use_cuda_ = false, 
    own_gpu_data_ = false, 
    gpu_device_ = -1 
} 

のですか?

答えて

2

例えば:

(gdb) p *((float *)(bottom[1].data_.px)->cpu_ptr_+0)

$15 = 0 

または

(gdb) p *((float *)(bottom[1].data_.px)->cpu_ptr_+1)

$16 = 1 

そしてまた、それはを交換するために必要なをあなたの実際のBLOBポインタ型に変換します。

関連する問題