タグ付けされた質問 「gdb」

このソフトウェアは、GNUソフトウェアシステムの標準デバッガであるGDBに関連または関連する問題に使用します。

4
GDB:変数が値と等しい場合に中断
変数が設定した値と等しいときにGDBにブレークポイントを設定させたいので、次の例を試しました。 #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } GDBからの出力: (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting program: /home/SIFE/run 0 1 2 3 4 5 6 Program exited normally. (gdb) ご覧のように、GDBはブレークポイントを作成しませんでしたが、これはGDBで可能ですか?
89 c  gdb 

3
指定された実行可能ファイルの外部でgdbを使用してシングルステップアセンブリコードを使用すると、「現在の関数の境界が見つかりません」というエラーが発生します
私はgdbのターゲット実行可能ファイルの外にいて、そのターゲットに対応するスタックさえ持っていません。私はx86アセンブリの専門家ではないので、とにかくシングルステップでアセンブリコードで何が起こっているのかを確認したいと思います。残念ながら、gdbはこの単純なアセンブリレベルのデバッグを行うことを拒否します。適切なブレークポイントで設定および停止できますが、シングルステップ以降を実行しようとすると、gdbは「現在の関数の境界が見つかりません」というエラーを報告し、EIPは変更されません。 追加の詳細: マシンコードはgccasmステートメントによって生成され、objdump -dの出力から、それが実行されているカーネルメモリの場所にコピーしました。ローダーを使用してオブジェクトコードを再配置されたアドレスにロードする簡単な方法は気になりませんが、ロードはカーネルモジュールで実行する必要があることに注意してください。 別の代替策は、gdbに提供する偽のカーネルモジュールまたはデバッグ情報ファイルを作成して、この領域がプログラムコード内にあると信じ込ませることだと思います。gdbは、カーネル実行可能ファイル自体で正常に機能します。 (本当に知りたい人のために、実行時にVMware VM内のLinuxカーネルデータスペースにコードを挿入し、VMwareWorkstationの組み込みgdbスタブを介してカーネルをリモートデバッグするgdbからデバッグしています。カーネルを記述していないことに注意してください。悪用;私はプロトタイプを書いているセキュリティ大学院生です。) (アセンブリ内の各命令にブレークポイントを設定できます。これは機能しますが、x86アセンブリ命令のサイズが異なり、再起動するたびにアセンブリの場所が変わるため、しばらくするとかなり面倒になります。)


2
ポイントが指定された回数に達した後にのみGDBブレークポイントを壊すにはどうすればよいですか?
何度も呼び出され、最終的にはセグメンテーション違反が発生する関数があります。 ただし、私は何年もここにいるので、この関数にブレークポイントを設定して、呼び出されるたびに停止したくありません。 counterGDBでブレークポイントにを設定できると聞きました。ブレークポイントに到達するたびに、カウンターがデクリメントされ、counter= 0の場合にのみトリガーされます。 これは正確ですか?もしそうなら、どうすればよいですか?このようなブレークポイントを設定するためのgdbコードを指定してください。
85 gdb  breakpoints 

8
なぜGDBは行間を予期せずジャンプし、変数を「<valueoptimizedout>」として出力するのですか?
誰かがgdbのこの動作を説明できますか? 900 memset(&amp;new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 …

4
「EXC_BREAKPOINT(SIGTRAP)」の例外は、ブレークポイントのデバッグによって発生しますか?
私はすべてのテストマシンで非常に安定していて、ほぼすべてのユーザーに対して安定しているように見えるマルチスレッドアプリを持っています(クラッシュの苦情がないことに基づいています)。ただし、クラッシュレポートを送信してくれた1人のユーザーにとって、アプリは頻繁にクラッシュします。すべてのクラッシュレポート(最大10個の連続したレポート)は基本的に同じように見えます。 Date/Time: 2010-04-06 11:44:56.106 -0700 OS Version: Mac OS X 10.6.3 (10D573) Report Version: 6 Exception Type: EXC_BREAKPOINT (SIGTRAP) Exception Codes: 0x0000000000000002, 0x0000000000000000 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Thread 0 Crashed: Dispatch queue: com.apple.main-thread 0 com.apple.CoreFoundation 0x90ab98d4 __CFBasicHashRehash + 3348 1 com.apple.CoreFoundation 0x90adf610 CFBasicHashRemoveValue + 1264 2 com.apple.CoreText 0x94e0069c …

1
ASLRがオンになっているのに、__ libc_start_mainのアドレスがGDB内で常に同じであるのはなぜですか?
Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6 (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/firstlove/projects/org-ioslide/example/a.out Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6 (gdb) r The program being debugged has been started already. Start it …
16 c  linux  gdb  libc  aslr 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.