1

gdbで次のコードを実行しようとすると、c/gtk +アプリケーションと3つの要素を埋めたGListがあります。

if (g_list_length(mw->img_list) > 0)
   printf(">0");
else
   printf("<0");

分かりました:

プログラム受信信号 SIGSEGV、セグメンテーション違反。[スレッド 0xb73c4700 (LWP 7936) に切り替え] IA__g_list_length (list=0x6e6920) at glist.c:767 767 glist.c: そのようなファイルまたはディレクトリはありません。glist.c で

それは何ですか?

ありがとうございました。

4

3 に答える 3

2

これは glib でのクラッシュです。おそらく、リストへの不適切なポインターを渡しているためです。デバッガーはソース コードを読み込んでクラッシュした場所を表示しようとしますが、見つかりません (おそらく、ソースが手元になくても lib にリンクしただけなので)。

gdbupコマンドを使用して、コードに到達するまでコール スタックを上に移動し、g_list_length()関数に渡した引数を調べます。

于 2010-06-10T14:54:16.167 に答える
2

デバッガーは、問題のデバッグに役立つように GList のソース コードを見つけようとしています。通常、ソースはインストールされていません。デバッグ パッケージまたは何らかのソースをインストールする必要があります。

Fedora システムを使用している場合は、debuginfo-install glib2それを行います。Debian または Ubuntu では、このためのパッケージが存在する可能性があり、末尾が-dbg?である可能性があります。

于 2010-06-10T15:05:08.593 に答える
0

存在しないもの (ハードディスク上) を見つけようとしているように見えます。コードはこれで全部ですか?

于 2010-06-10T14:51:37.377 に答える