セッション例とは? わかりやすく解説

セッション例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/17 00:30 UTC 版)

GNUデバッガ」の記事における「セッション例」の解説

C言語書かれた以下のソースコード考える。 #include #include #include size_t foo_len( const char *s ){ return strlen( s );}int main( int argc, char *argv[] ){ const char *a = NULL; printf( "size of a = %lu\n", foo_len(a) ); exit( 0 );} Linux上のGCCコンパイラ使用する場合生成されバイナリ適切なデバッグ情報含めるために-gフラグ使用して上記コードコンパイルなければならない。これにより、GDB使用してバイナリ検査できる。上記コードを含むファイルが example.c という名前であると仮定すると、コンパイルのためのコマンド次の様になる。 $ gcc example.c -Og -g -o example そして、バイナリ実行できるようになった。 $ ./exampleSegmentation fault サンプルコード実行するセグメンテーションフォールト発生するので、GDB使用して問題検査することができる。 $ gdb ./exampleGNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16)Copyright (C) 2011 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later 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-redhat-linux-gnu".For bug reporting instructions, please see:...Reading symbols from /path/example...done.(gdb) runStarting program: /path/exampleProgram received signal SIGSEGV, Segmentation fault.0x0000000000400527 in foo_len (s=0x0) at example.c:88 return strlen (s);(gdb) print s$1 = 0x0 この問題は8行目にあり、strlen関数呼び出す際に発生する (引数 s が NULL であるため)。strlen実装 (インライン関数かどうか) に応じて出力異な場合がある。 コマンド btプログラムスタック・トレースをとると、main関数からソースコード階層降りてstrlen関数呼び出されている流れ確かめられるGNU gdb (GDB) 7.3.1Copyright (C) 2011 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later 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 "i686-pc-linux-gnu".For bug reporting instructions, please see:...Reading symbols from /tmp/gdb/example...done.(gdb) runStarting program: /tmp/gdb/exampleProgram received signal SIGSEGV, Segmentation fault.0xb7ee94f3 in strlen () from /lib/i686/cmov/libc.so.6(gdb) bt#0 0xb7ee94f3 in strlen () from /lib/i686/cmov/libc.so.6#1 0x08048435 in foo_len (s=0x0) at example.c:8#2 0x0804845a in main (argc=, argv=) at example.c:16 この問題修正するには、変数 a (main関数内) に有効な文字列を含まなけれならないコード修正版は次の通りである。 #include #include #include size_t foo_len( const char *s ){ return strlen(s);}int main( int argc, char *argv[] ){ const char *a = "This is a test string"; printf( "size of a = %lu\n", foo_len(a) ); exit( 0 );} GDB内で実行ファイルを再コンパイルして実行すると、正し結果得られるようになったGNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16)Copyright (C) 2011 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later 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-redhat-linux-gnu".For bug reporting instructions, please see:...Reading symbols from /path/example...done.(gdb) runStarting program: /path/examplesize of a = 21[Inferior 1 (process 14290) exited normally] GDBprintf出力画面表示しプログラム正常に終了したことをユーザ知らせる。

※この「セッション例」の解説は、「GNUデバッガ」の解説の一部です。
「セッション例」を含む「GNUデバッガ」の記事については、「GNUデバッガ」の概要を参照ください。

ウィキペディア小見出し辞書の「セッション例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「セッション例」の関連用語

セッション例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



セッション例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのGNUデバッガ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS