2
テンプレートを使って定義されたC++クラスメンバ関数でブレークポイントを設定しようとしています。私はstackoverflowで解決策を探しましたが、同じ問題を見つけることができませんでした。以下は関数の定義を示すサンプルコードです(py-faster-rcnn caffeコードからDtypeはfloatの外側に定義されています)。テンプレートを使って書かれたC++クラスメンバ関数のGDBブレークポイントを設定する
template <typename Dtype>
void SoftmaxWithLossLayer<Dtype>::Forward_gpu(
const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) {
softmax_layer_->Forward(softmax_bottom_vec_, softmax_top_vec_);
const Dtype* prob_data = prob_.gpu_data();
const Dtype* label = bottom[1]->gpu_data();
昨日、私は正常に
br SoftmaxWithLossLayer<float>::Forward_gpu(const vector<Blob<float>*>& , const vector<Blob<float>*>&)
を使用してブレークポイントを設定する。しかし、今朝、それは動作しません!何が問題なの? br filename:linenuber
を使用すると動作します。
は(ところで、私はC++ライブラリのブーストで包まれたが、私は、これは無関係であると思い含むプロセス実行のpythonに付属のDDDを使用しています。)
デバッグテンプレートは、常にヒットアンドミスの命題でした。私の経験上、ブレークポイントを設定する最も信頼できる方法は関数名ではなくファイル+行番号です。 –
私はこれを試したことはありませんが、nmを使って共有ライブラリ内の定義方法を判断したことがありますか?この情報を使用して、ddd/gdbが一貫してテンプレートメソッドを見つけるのを助けることができます。 –
@ClaudioCorsi、うわー、その方法のように見えます。私の 'br Solver :: Step(int iters)'コマンドがうまくいかず、 'nm _caffe.so'の結果で' Solver。* Step'を検索したところ、このような関数が1つしか見つかりませんでした。 'b _ZN5caffe6SolverIfE4StepEi'それは動作します!ありがとう、次回私はC++を見ていますが、私はこの方法を試してみましょう! (私はそれを選択された答えとして選ぶことができるように答えとしてそれを再投稿することができます)。 –