質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

5077閲覧

eclipseでのC++ stack traceの読み方

nanorunamonai

総合スコア34

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2015/12/09 02:26

編集2015/12/09 02:30

eclipseでC++でコードを書いていますが、
メモリ解放でつまづいてます。

0 [main] prototype 8788 cygwin_exception::open_stackdumpfile: Dumping stack trace to prototype.exe.stackdump

がコンソールに出力され、下記のようなファイルが作成されてます。
これらから、エラーの場所や原因を特定できますか?
stack traceの読み方等教えてください。

Stack trace: Frame Function Args 0000023BB50 0018007252A (0000023E3F4, 00000000000, 006000BEE20, 0000023DE50) 0000023BBF0 00180073CC0 (00000000064, 00000000000, 00000000180, 00000000000) 0000023BE40 0018012E28F (0018014C79F, 00000000000, 00000000000, 00000000000) 0000023C130 0018012B040 (00180150C55, 00000000000, 00000000000, 006000180E8) 0000023C320 0018012B509 (0000023C0D0, 006000C1AD0, 00180150C55, 00000000006) 0000023C320 0018012B6DC (0000023C230, 003CD22B6C0, 001801F3930, 00000000000) 0000023C320 0018012B99F (006000C26A8, 0000023C301, 006000C1AD0, 006000C1AD0) 0000023C320 0018016106A (0018012700B, 003CD22B6C0, 006000C26A8, 0000023C301) 0000023C320 001800CDB63 (006000C2E90, 006000C26A8, 0018012700B, 006000C1B90) 0000023C320 0018012700B (006000C2E90, 006000C26A8, 0018012700B, 006000C1B90) 0000023C320 00100405178 (0000023C950, 00000000017, 006000BEE20, 006000BEB00) 0000023C370 0010040792B (0000023CAD0, 00000000002, 00000000030, FF0700010302FF00) 0000023CBC0 001800483CD (00000000000, 00000000000, 00000000000, 00000000000) 00000000000 001800460DC (00000000000, 00000000000, 00000000000, 00000000000) 00000000000 00180046174 (00000000000, 00000000000, 00000000000, 00000000000) 00000000000 00100408681 (00000000000, 00000000000, 00000000000, 00000000000) End of stack trace (more stack frames may be present)
Chironian👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく、Frameはスタックフレーム(オート変数の領域)のアドレス。
Function は、実行中の関数を呼び出した関数への戻りアドレス。
Args は、関数が呼び出された引数(更新されている場合もあり)が最初の引数から並んでるのだと思う。

それを踏まえて、リンクマップをもとに下から上に向かってたどっていくと何かわかるかも。

投稿2015/12/09 18:25

T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanorunamonai

2015/12/09 23:42

ご回答ありがとうございます。 各16進数はアドレスなのですね。
T.Kanno

2015/12/10 02:55

cygwin とありますので Intel 系と思いますが、データのエンディアンや見方は同じecripse系でもターゲット(のCPU)によって変わってきますので、注意が必要かと思います。 基本は、Funcionの、おそらくは戻りアドレスには、一般的には関数を呼び出したときの戻りアドレスが格納されていますので、リンクマップとの対比(状況によってはオフセット計算が必要)で、関数の呼出し構造を調べる事になるでしょう。 たいていは、この時点で問題の発生した関数を特定できますので、原因が判明することが多いです。 それでもダメな場合は、Args で関数への引数領域や Frame のオート変数を調べますが、パラメータの積まれ方やデータのアロケーションによってはワードに複数データがパックされたり、複数ワードにまたがっていたりすることがありますので注意が必要です。 直子の場合は、リンクマップではなくコンパイラが展開したアッセンブライメージ(一般にオブジェクトリスト等という)が必要になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問