タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

debugとc++に関するkasahiのブックマーク (3)

  • ウノウラボ Unoh Labs: gdbの使い方

    今年の2月にマカーになったbokkoです。どうも僕の使っているフォントがほかの人には見づらいらしく、「そのフォントはねぇよw」と言われたり、外付けのキーボードを使っているせいか、「MacBookの意味なし!」と社内で言われてたりしています。 今日はgdbのお話です。gdbは非常に広く使われているデバッガで、特にC、C++のプログラムをデバッグするのによく使われています。 デバッガの使い方 プログラムをデバッグする際、例えば以下の方法が挙げられます。 1. ソースコードを読む 2. ソースコードに出力関数を仕込む(例えばprintf) 3. ソースコードを書き換えて実行してみる これで十分な場合もありますが、そうでない場合もあります。これらの方法ではプログラムを実行している最中にこちらからソースコードレベルでのアクションを起こすことが難しいので、例えば、プログラムをある時点で止めて変数の

  • 例外の発生箇所を gdb で捕捉する - odz buffer

    gdb で catch throw を使えば例外を捕捉できるという話をコメントで教えていただいたので、試してみた。 #include <string> static void foo(void); int main() { foo(); return 0; } static void foo() { std::string s = "abc"; s.replace(-1, 0, "d"); } % g++ -g -Wall -W -O2 exc_bt.cpp -o exc_bt % gdb exc_bt GNU gdb 6.4.90-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you

    例外の発生箇所を gdb で捕捉する - odz buffer
  • 例外とバックトレースを使ったデバッグ - odz buffer

    あるプログラムを使っていると std::out_of_range で abort したので、デバッグしようとするものの、C++ は例外で abort しても Java のようにバックトレースを表示してくれたりしないので、どこが問題か分かり難くて困った。 #include <cstdlib> #include <cstdio> #include <execinfo.h> namespace std { void __throw_out_of_range(const char* msg) { void *trace[128]; int n = backtrace(trace, sizeof(trace) / sizeof(trace[0])); backtrace_symbols_fd(trace, n, 1); int a = 0 / 0; printf("%d\n", a); abort(

    例外とバックトレースを使ったデバッグ - odz buffer
  • 1