Windows+cygwin+emacsでc++のプログラムを勉強しています。デバッガとしてemacs上でgdbを使っているのですが、無名の名前空間にある関数にブレイクポイントを設定する方法がわかりません。例えば、
namespace {
void foo() {
...
}
}
int main(void) {
foo();
}
のようなfoo.cppファイルをコンパイルしてfoo.exeファイルを作り、それをgdbによりデバッグするとします。そこで、gdb上で
b main
とすると、mainに入ったところにブレイクポイントが設定されますが、
b foo
としても、Function "foo" not defined.と表示されてブレイクポイントが設定されません。無名の名前空間にある関数にはどのように入力してブレイクポイントを設定するのでしょうか。とりあえず、今は行番号によりブレイクポイントを設定しています。ご存じの方がいらっしゃいましたら、ご教授ください。お願いします。
No.1ベストアンサー
- 回答日時:
一番良い方法かどうかはわかりませんが、
b foo.cpp:foo
でブレークポイントを設定することが出来ました。
ちなみに、各バージョンは
cpp (GCC) 3.4.4 (cygming special)
gdb 6.5.50.20060706-cvs (cygwin-special)
です。
ご回答ありがとうございます。試してみましたが、こちらではブレイクポイントを設定することはできませんでした。gdbのバージョンが
GNU gdb 2003-03-03-csv (cygwin special)
だからでしょうか...。
No.2
- 回答日時:
cygwinはあまり分からないのですが、多分これでいいのかと思います。
% g++ -g foo.cpp
% nm a.exe # シンボル一覧を見てみる。
08049530 d _DYNAMIC
08049614 d _GLOBAL_OFFSET_TABLE_
08048514 R _IO_stdin_used
w _Jv_RegisterClasses
080483c4 T _ZN36_GLOBAL__N_foo.cpp_00000000_DF1B9ED13fooEv
08049520 d __CTOR_END__
0804951c d __CTOR_LIST__
08049528 d __DTOR_END__
08049524 d __DTOR_LIST__
08048518 r __FRAME_END__
0804952c d __JCR_END__
0804952c d __JCR_LIST__
08049634 A __bss_start
08049628 D __data_start
080484c0 t __do_global_ctors_aux
08048370 t __do_global_dtors_aux
0804962c D __dso_handle
0804951c a __fini_array_end
0804951c a __fini_array_start
w __gmon_start__
U __gxx_personality_v0@@CXXABI_1.3
0804951c a __init_array_end
0804951c a __init_array_start
08048460 T __libc_csu_fini
080483f0 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
08049634 A _edata
08049638 A _end
080484f4 T _fini
08048510 R _fp_hw
080482d8 T _init
08048320 T _start
08048344 t call_gmon_start
08049634 b completed.5513
08049628 W data_start
080483a0 t frame_dummy
080483ca T main
08049630 d p.5511
% nm a.out | grep foo # ちょっと多いので、怪しそうなのを探してみる
080483c4 T _ZN36_GLOBAL__N_foo.cpp_00000000_DF1B9ED13fooEv
ということで。
(gdb) b _ZN36_GLOBAL__N_foo.cpp_00000000_DF1B9ED13fooEv
でどうでしょうか?
それと、DF1B9ED13の部分はコンパイルする毎に変る様子だったので御自身の環境でやらないとダメかと思います。
もしくは、
% nm a.exe | c++filt | grep foo
080483c4 T (anonymous namespace)::foo()
ということなので
(gdb) b (anonymous namespace)::foo()
でもいいかと思います。
ちなみに私は、
g++ (GCC) 4.1.1
GNU gdb 6.4
と、割と新し目なので違う可能性もあります。
あと、linuxなので nm で出てるアドレスは大分違うと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
- C言語・C++・C# Makefileのechoの展開について 2 2022/07/26 07:35
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- gooポイント gooポイントをdポイントに交換できない。 3 2022/04/22 20:39
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- gooポイント dポイントと gooポイント 3 2022/10/02 19:53
- C言語・C++・C# condaコマンドに対応したプロキシ設定が思うようにならないようです。 2 2022/04/11 17:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
戻り値について
-
VBAを何回も作り直して、容量が...
-
ILSpyで、デコンパイルできない。
-
「fatal error C1189」を回避す...
-
windowsでLinuxで作成したソー...
-
” OS ビルド ” の意味が分か...
-
複数のサブディレクトリを一緒...
-
<math.h>があるのにsqrtが・...
-
コンパイルエラー:ユーザ定義...
-
漢字のコメントをはずすとコン...
-
エクセルVBAではRound...
-
C言語でmからnまでの合計を求め...
-
C++コンパイル時に『 C1083: in...
-
必要なDBG ファイルが見つから...
-
マクロ コンパイルがグレーバック
-
gdbデバッグのためのmakefile作成
-
不要な #include
-
RPGでプログラムからソースファ...
-
共有ライブラリの関数はヘッダ...
-
Makefile作成時の拡張子.oとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報