問題タブ [gdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
590 参照

iphone - iPhone のデバッグ: 変数が最新ではありませんか?

私は最近、デバッガーを広範囲に使用し始めたばかりなので、これが制限であるかどうかはわかりません。

ctrliPhone でデバッグする場合、変数を明示的に表示しない限り ( + click-> ) 、変数は最新ではありませんview variable as expression。明示的に表示せずに実際の変数を表示する方法はありますか?

0 投票する
2 に答える
2149 参照

linux - リモート Linux バイナリをデバッグするには?

状況は次のとおりです。

クラッシュしている Linux バイナリがあります。ログ ファイル、トレース ファイルなどはありません。デバッガーを接続して (ソースをローカルに持っています)、エラーを追跡できるようにする必要があります。

この問題に取り組むための最も簡単で最良の方法は何ですか?

0 投票する
7 に答える
16456 参照

gdb - GDBを使用してmmapされたアドレスを調べる

Linuxのダイレクトメモリアクセスに投稿したドライバーを使用して、物理RAMをユーザースペースアドレスにmmapしています。ただし、GDBを使用してアドレスを確認することはできません。つまり、x 0x12345678(0x12345678はmmapの戻り値)は、「アドレス0x12345678のメモリにアクセスできません」というエラーで失敗します。

このメモリを表示できることをGDBに伝える方法はありますか?あるいは、このメモリにアクセスできるようにするために、mmap(そこでのfoo_mmapの呼び出しまたは実装のいずれか)で実行できる別のことはありますか?

/ dev / memについて質問しているのではなく(最初のスニペットのように)、ioremap()、virt_to_phys()、およびremap_pfn_range()を介して取得したメモリへのmmapについて質問していることに注意してください。

0 投票する
5 に答える
62146 参照

gcc - gcc -ggdb と gcc -g の違いは何ですか

gcc を使用して C プログラムをコンパイルするときは、通常-g、必要に応じて gdb が役立つように、いくつかのデバッグ情報を elf ファイルに取得するために使用します。

-ggdbただし、デバッグ情報をより gdb に適したものにするため、一部のプログラムでは を使用していることに気付きました。

それらはどのように異なり、どちらを使用することをお勧めしますか?


注:プログラムまたは GCC をデバッグするためのオプションへのリンク、 http: //gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

0 投票する
5 に答える
12942 参照

linux - GDBでのリモートデバッグエラー

x86_64 suse linuxで32ビットアプリケーションをリモートデバッグしようとしましたが、この「リモートレジスタのフォーマットが正しくありません」というエラーが発生します。

ポート12345(gdbserver localhost:12345 my_prog)でリッスンしているようにgdbserverを起動します

そしてこれはエラーです:

これはデバッグサーバーマシン(uname -a)です:

Linuxサーバー2.6.16.60-0.31-smp#1 SMP Tue Oct 7 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

そして、これはデバッグクライアントマシン(uname -a)です:

Linuxクライアント2.6.16.54-0.2.5-デフォルト#1 Mon Jan 21 13:29:51 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

ただし、両方のマシンは仮想マシン(VMWare)で実行されています。gdbserverバイナリは、クライアントマシンからサーバーマシンにコピーされます。

(デバッグサーバーのランタイム環境は本番環境に似ており、開発ツールやソースコードへのアクセスなどが含まれていないため、リモートデバッグします。)

どんな提案でも大歓迎です。

更新:これは、gdbで次のコマンドを発行することで機能しました:

アーキテクチャi386:x86-64を設定します

0 投票する
4 に答える
2158 参照

debugging - ライブラリのソースレベルのデバッグを行うにはどうすればよいですか

次の設定があります。私の作業セットアップは、Windowsホスト上のARMコンパイラReal View Developer Suite(RVDS)3.2を扱っていますが、この状況は、任意のホスト上の他のCコンパイラの一般的な状況である可能性があります。

WindowsホストでRVDS3.2コンパイラツールチェーンを使用して、CコードのARMライブラリ(静的ライブラリ-.aファイル)を構築します。次に、このライブラリをLinuxホスト上のARM-Linuxコンパイラツールチェーンを使用するアプリケーションにリンクして、ARM実行可能ファイルを取得します。Linuxでgdbを使用してこの生成されたARM実行可能ファイルをデバッグしようとすると、リンクされているライブラリに存在する関数にブレークポイントを設定しようとすると、gdbはソースが見つからないことを理由にブレークポイントを設定できません。そこで、実行可能ファイルが存在するLinuxフォルダーにライブラリを作成するために使用したすべてのソースファイル(* .c)を手動でコピーしました。それでもgdbはブレークポイントを設定できません。だから今私は考え始めました:

  1. このライブラリをアプリケーションにリンクして生成された実行可能ファイルをgdbで起動することにより、別のコンパイラチェーンを使用してWindowsで作成したこのライブラリのソースレベルのデバッグを行うにはどうすればよいですか。出来ますか?どうすればいいですか?このライブラリソースレベルのデバッグを有効にするためのコンパイラオプションがRVDSコンパイラツールチェーンにありますか?

  2. それらのソースファイルのウィンドウに存在するのとまったく同じフォルダー構造で、ソースファイルをLinuxにコピーする必要がありますか?

0 投票する
8 に答える
11505 参照

gdb - MinGW 上の GDB で、Ctrl-C でプログラムを停止するにはどうすればよいですか?

私は Windows を使用しており、MinGW でビルドされた実行可能ファイルで GDB を実行しています。プログラムに無限ループがあります。Ctrl+を押して見つけたいC。実行すると、プログラムと GDB の両方が終了します。この件に関するすべてのヘルプは、私が Linux を使用していることを前提としているようです。

0 投票する
3 に答える
1140 参照

python - 大規模プロジェクトの立ち上げ/デバッグをどのように自動化していますか?

シナリオ:

手で起動するのが面倒な複雑なソフトウェアがあります。私が行ったことは、実行可能ファイルを起動し、デバッグ用にgdbをアタッチするための Python スクリプトを作成することです。

プロセス起動スクリプト:

  • 環境変数が設定されていることを確認します。
  • ローカルのビルド ディレクトリが環境LD_LIBRARY_PATH変数に追加されるようにします。
  • 現在の作業ディレクトリを実行可能ファイルが期待する場所に変更します(私の設計ではありません)
  • 唯一のコマンドラインオプションである構成ファイルを使用して実行可能ファイルを起動します
  • 実行可能ファイルからの出力を 2 番目のロギング プロセスにパイプします
  • 実行可能ファイルの PID を記憶し、実行中の実行可能ファイルに gdb を起動してアタッチします。

スクリプトは機能しますが、1 つの注意点があります。ctrl-c はデバッグ対象を中断せず、制御を gdb に戻します。したがって、アクティブなブレークポイントなしで「続行」すると、プロセスを再び停止することはできず、別のシェルから強制終了/中断する必要があります。ところで、「kill -s SIGINT <pid>」を実行すると、<pid> はデバッグ対象の pid に戻りますが、gdb のプロンプトに戻ります...しかし、このようにしなければならないのは本当に面倒です

最初は、Python が SIGINT シグナルを取得していると思っていましたが、シグナル ハンドラーをセットアップしてシグナルをデバッグ対象に転送しても問題が解決しないため、そうではないようです。

私はpythonスクリプトにさまざまな構成を試しました(サブプロセスの代わりにos.spawn *を呼び出すなど)。pythonが子プロセスを起動した場合、SIGINT(ctrl-c)シグナルはしないようですgdb または子プロセスにルーティングされます。

現在の考え方

  • これは、debugee と gdb に別のプロセス グループ ID が必要なことに関連している可能性があります...これに対する信憑性はありますか?
  • SELinux のバグの可能性はありますか?

情報:

  • gdb 6.8
  • Python 2.5.2 (Python 2.6.1 にも存在する問題)
  • SELinux 環境 (プロセスにシグナルを配信するバグ?)

私が検討した代替案:

  • .gdbinit ファイルを設定して、スクリプトが行うことと同じように行うこと、環境変数、および現在の作業ディレクトリがこのアプローチの問題です。
  • 実行可能ファイルを起動し、gdb を手動でアタッチする (yuck)

質問: 大規模プロジェクトの起動/デバッグをどのように自動化しますか?

更新: 以下の Nicholas Riley の例を試してみました。自宅の Macintosh では、すべて cntl-c がさまざまな程度で機能しますが、製品の boxen (SELinux を実行していると思われる) では動作しません...

0 投票する
3 に答える
9213 参照

c - スタックオーバーフローのポイントを検出する方法

Cプログラムに次の問題があります。どこかにスタックオーバーフローがあります。最適化なしでデバッガーシンボルを使用してコンパイルしたにもかかわらず、プログラムは次の出力で終了します(Linuxではgdbの内部または外部)。

プログラムは信号SIGSEGV、セグメンテーション違反で終了しました。プログラムはもう存在しません。

これが実際にスタックオーバーフローであることを検出できる唯一の方法は、valgrindを介してプログラムを実行することでした。問題を特定するのに役立つコールスタックトレースをオペレーティングシステムに強制的にダンプさせる方法はありますか?

残念ながら、gdbではプログラムを簡単に利用することもできません。