• ベストアンサー

C++でSTLを使ったときのデバッグ方法

STLを使ったときの効率の良いデバッグ方法を教えてください. STL使ったときのエラーメッセージが,何を言わんとしているのかが さっぱり分かりません. STLのソースをテンプレートで読み込んでるせいで, STLのソースに依存してるかのような非常に長くて分けのわからん エラーメッセージが出るのです. このような場合に,エラーの真の原因(どう考えても,テンプレートではなく, 私の未熟なSTLへの理解が原因でしょう)を突き止める方法はどのようなものが あるのでしょうか? 教えてください.

  • bilbo
  • お礼率57% (11/19)

質問者が選んだベストアンサー

  • ベストアンサー
  • tediwec
  • ベストアンサー率70% (21/30)
回答No.1

こんにちは。 確かに長くてわけのわからんメッセージが出てきてつらいですよね。 「Effective STL」という本に書いてあった方法ですが、 例えばstd::string型の場合、 std::basic_string<char,std::char_traits<char>,std::allocator<char> > のように表示されてしまうので(VC++6.0)、これをstringに置換してしまう、というのがありました。 こういう方法だとメッセージがだいぶ短くなって少し読みやすくなるのではないでしょうか。

bilbo
質問者

お礼

なるほど. そのような変換をするスクリプトをperlなどで作って, それに通してやれば良いわけですね. 参考になる文献など示して頂いてありがとうございます. でも,皆さん実際にはどの様に対処しているのでしょう? こればっかりは,慣れしかないんですかね.

関連するQ&A

  • STL使用時のデバッグ設定

    現在C++を使いプログラミングをしています Microsoft Visual Studio 2005を使っているのですが SLTを使用した場合ランタイムライブラリの設定を マルチスレッドデバッグ→マルチスレッドに変更すると エラーが出ることがわかりました。 原因を調べているとSTLを使っているとエラーが出ることまで分かりました。 エラーが出るコードは #include <stdio.h> #include <LIST> using std::list; int main() { list<int> ilist; ilist.push_back(1); return 0; } warning LNK4098: defaultlib 'LIBCMT' は 他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 の警告と共に、 未解決の外部シンボル~が参照されました。 とエラーがでます できればMTでコンパイルが通るようにしたいのですが、良い方法ないでしょうか?

  • デバッグ

    過去にも似たような質問が沢山あったので被っていたらすみません。 私は閲覧ではなくてHPを作っている方なのですけど 作っている段階でランタイムエラーが発生しました デバッグしますか? というのが出てくるのですがよく分かりません。 原因がJavaScriptなのは分かってるのですが ソースが間違っているのでしょうか? デバッグとはどうやるのでしょうか? 知ってる方教えてください

  • javascriptのデバッグの方法

    javascriptでエラーが出る場合のデバッグの方法についていろいろな方法を教えていただけませんか。 試してみたことは #alertで値を拾う #ネスケのアドレスバーにjavascriptと入れてエラー行を見る しかし、なかなかエラーの原因がわからないことが多くて・・・。

  • VBA 型が一致しません の行からデバッグするには

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 Excel2010 OfficeSP2 でございます。  VBA実行中にエラーが起こると大抵の場合はメッセージボックスが表示されて、そこにある「デバッグ」ボタンを押すとエラーが生じている行が黄色くなり、デバッグモードに入ると思います。(添付図の左側) が、私の環境で起こります「実行時エラー13 型が一致しません」は いつも、何故か「OK」ボタンしかございません。(添付図の右側)  長い時間計算を回した後にこのエラーで止まられると、 ・Debug.Printなど対処を施す ・長時間、エラーが出る時まで計算を回す を何度も繰り返してエラー原因を特定せねばなりませんため、非常に非効率で悩んでおります。  「デバッグ」ボタンが付いたエラーメッセージボックスが出されるようにするには、何か方法があるのでございましょうか?  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • PHPのデバッグ方法

    PHPでデバックする方法を探しています。 var_dumpやprint_rで変数を表示させる以外に、効率よくデバッグできる方法が知りたいです。 GUIで値がウォッチできたり、ソースのバージョン管理できるような ソフトはあるのでしょうか?

    • ベストアンサー
    • PHP
  • STLについて

    VC++6を使っています。ベクタを戻り値とするプログラムを書いています。効率が悪く感じるのですが、STL?ではこういうやり方は正しいのでしょうか? また、一般的にSTLで引数や戻り値を扱う場合、どのようなタイプ(string?)を使えば、効率よく、きれいなプログラムが書けるのでしょうか? class A{ ... } vector<A> test(void){ vector<A> ret; for (int i = 0; i < 1000; i++){ ret.push_back( A(i) ); } return ret; } vector<A> a = test(); // 巨大なコンテナが返され、aにコピーされる? ※基本的に戻り値の仕組みが理解不足です。 char *の場合は、char配列のポインタが返され、新たな変数にポインタ値がコピーされるという解釈で結構ですか? char * sample(void){ char *p = new [1000]; return p; } char *q = sample();

  • デバッグ時はOK、デバッグ無しで開始するとERROR

    現在、VisualStudio .NET 2003 にてC++でプログラミングを行っているのですが、 [デバッグ→開始]で実行しますとエラーは起こらず実行できるのですが、[デバッグ→デバッグなしで開始]を行うとオーバーフローエラーが起きるという現象に苦しんでいます。 両者の違いはデバッグ用のソースコードを埋め込むか埋め込まないかだけの違いだと思っているもので、いまいち納得ができていません。 (特にデバッグ時に、このエラーを検知できない所が) このような現象は、よくあることなのでしょうか? もしもあるのでしたら対策方法などを教えていただけましたら幸いです?

  • デバッグについて教えてください

    よろしくお願いします。 サンプルのソースを参考にして、『メモ帳』を作成しています。 プログラムの記述間違いや、コンパイル時のエラーは無いのですが、 出来上がった『メモ帳』に何かを書くと、いきなり 『文書保存の確認部分のメッセージ』が表示され、 ×ボタンで閉じようとすると、こんどは『上書き保存の部分のメッセージ』が表示されます。 こちらも閉じようとして、×ボタンを押すと再び、『上書き保存の部分』の表示となり、いつまでも繰り返します。 そこで、 { char szBuf[256]; wsprintf(szBuf, "x = %d, x"); MessageBox(hWnd, szBuf, "Debug", MB_OK); } と言うメッセージボックスを、『新規作成、ファイルを開く、文書保存の確認、上書き保存などの、各、関数部分に』挿入してデバッグしたのですが、何の変化もありません。 デバッグの方法に間違いがあると思うのですが不慣れなため気づきません。 詳しい方、アドバイスをお願いします。

  • デバッグモード

    通常起動でネットに接続しようとすると、フリーズしてしまい接続することが出来ません。そのためデバッグモードで起動しネット接続を試したらフリーズすること無く接続することが出来ました。 このような場合接続できない原因を特定することは出来るのでしょうか? 特定することが難しい場合には、このままデバッグモードで起動して使っていきたいと思うのですが、デバッグモードを通常状態として使い続けることに何らかの害があるのか教えていただけないでしょうか。 当方デバッグモードというものをよく理解できていない者です。

  • J2ME の 効率的なデバッグ方法

    統合開発環境 Eclipse 3.4.2 J2ME Sun Java Wireless Toolkit 2.5.2.01 for CLDC こちらの環境で、携帯アプリを自作しているのですがクラスを スタンドアローンで動かすことができず、スレッド実行しています。 エラーはどのクラスで起きたのか分からないまま、様々なエラーが でるために、場合によっては各行に System.out.println("Line 123"); と記述してコンソールで、どこで止まったのか調べてクラスのエラースロー で原因を確かめるという方法をとって対処しています。 こんな方法しかないならデバッグ用の専用ツールを作成しますが プロの人に聞いたら、Eclipseの機能を使えばそんな方法やらんでも いいからと言われて調べて見たんですが。 明らかに携帯アプリの場合スレッド実行してるので、WEBアプリより デバッグは難しいんじゃないのか?と疑念を抱いております。 どうやってデバッグしているでしょうか? ご教授下さい。

専門家に質問してみよう