1

デバッグしようとすると、この出力が表示されます

プログラムは、 /home/devsw/tmp/objdir/i686-pc-linux-gnu/libstdc++-v3/include/の
std::string::compare (this=0x88fd430, __str=@0xbfff9060) でシグナル SIGSEGV、セグメンテーション違反 0x43989029 を受け取りました。
ビット/char_traits.h:253

253 { return memcmp(__s1, __s2, __n); }

現在の言語: auto; 現在C++


valgrind を使用すると、この出力が得られます

==12485== プロセスはシグナル 11 (SIGSEGV) のデフォルト アクションで終了します
==12485== アドレス 0x0 のマップされた領域の権限が正しくあり
ません ==12485== 0x1: (path_to_my_executable_file/executable_file 内)

4

2 に答える 2

8

Valgrind を使用する必要はありません。実際には、GNU DeBugger (GDB) を使用する必要があります。

gdb ( gdb path_to_my_executable_file/executable_file) を介してアプリケーションを実行し、デバッグを有効にして (-gまたは-ggdbGNU C/C++ コンパイラ用に) アプリケーションをコンパイルした場合は、( rungdb プロンプトでコマンドを使用して) アプリケーションを開始でき、SegFault に到達したら、バックトレース ( bt) を実行して、プログラムのどの部分が呼び出され、どの部分が停止したかを確認しますstd::string::compare

例 (C):

mctaylor@mpc:~/stackoverflow$ gcc -ggdb crash.c -o crash
mctaylor@mpc:~/stackoverflow$ gdb -q ./crash 
(gdb) run
Starting program: /home/mctaylor/stackoverflow/crash 

Program received signal SIGSEGV, Segmentation fault.
0x00007f78521bdeb1 in memcpy () from /lib/libc.so.6
(gdb) bt
#0  0x00007f78521bdeb1 in memcpy () from /lib/libc.so.6
#1  0x00000000004004ef in main (argc=1, argv=0x7fff3ef4d848) at crash.c:5
(gdb) 

したがって、私が興味を持っているエラーは、crash.c の 5 行目にあります。

幸運を。

于 2010-04-08T17:32:58.163 に答える
4

デバッガーでアプリを実行するだけです。ある時点で停止し、必要な情報を含むスタック トレースが得られます。

于 2010-04-08T17:01:29.553 に答える