2016-12-02 17 views
-4

実行ファイルで使用されるcファイルでセグメンテーションフォルトを見つけようとしていますが、リードが見つかりませんでした。誰もこれを行う方法を知っていますか?gdbを使用して.exeファイル内のセグメンテーションフォルトを見つける方法

+1

gdbでのデバッグについては、ウェブ全体で何も見つかりませんでしたか? – kaylum

+0

@kaylumそれは戦闘機クラブのようなものです。あなたが必要とするものを見つけるためには、必要なものを知っておく必要があります。現代の検索エンジンは新しいトピックで悪いです。彼らは関連性によって新しいものを押しのけようとします。良いガイドhttps://beej.us/guide/bggdb/ – Swift

+0

何も見つかりませんでした。 Swiftが私に与えたリンクから、私は私の検索クエリに特化していて、十分に広い検索をしていなかったと思う。 – user3304124

答えて

0

gdbを実行してgdbからプログラムを実行し、バックトレースを使用します。 stackコマンドを得ることができます。スタックフレームは、framコマンドを参照し、printを使用して変数の値をチェックします。インターネット経由でgdb tips \ docsを確認してください。 gdbを使用すると、クラッシュしたプログラムによって生成された既存のコアファイルを読み込んで、問題が発生した場所を見つけることができます。ロードされたコアファイルは、クラッシュポイントでの状態に等しく、単にバックトレースを使用します。あなたの質問に

回答はここにあった:

int main() { 
    int *pVal = NULL; 

    printf("ptr value is : %d", *pVal); 
    return 0; 
} 

あなたがするために、デバッグモードでコンパイルする必要があり、次のとおりです。ここ

2

Determine the line of C code that causes a segmentation fault?は間違いなくセグメンテーションフォールトを引き起こすサンプルプログラムです実行ファイルに追加のデバッグ情報を追加します。

gcc -g segFault.c 

それから、gdbを実行して実行可能ファイルのパス(この場合はa.out)を指定するだけです。そして、それを実行するだけで、gdbがセグメンテーション違反を引き起こす行をハイライト表示することがわかります。

~/Dropbox/cprog/demos : $ gdb a.out 
GNU gdb (GDB) 7.12 
Copyright (C) 2016 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-apple-darwin15.6.0". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word"... 
Reading symbols from a.out...Reading symbols from /Users/rohankumar/Dropbox/cprog/demos/a.out.dSYM/Contents/Resources/DWARF/a.out...done. 
done. 
(gdb) run 
Starting program: /Users/rohankumar/Dropbox/cprog/demos/a.out 

Program received signal SIGSEGV, Segmentation fault. 
0x0000000100000f62 in main() at segFault.c:6 
6  printf("ptr value is : %d", *pVal); 

また、値を印刷してプログラムのスタックトレースを表示することもできます。 gdb hereについて詳しく読むことができます。

ハッピーコーディング!

+0

* nix Dropboxはありますか?ニート! – Swift

関連する問題