2

Windows 環境で gdb を使用して vlc.exe をデバッグする際に問題が発生しました。http://wiki.videolan.org/Win32Compileの指示に従い、Linux で VLC を正常にコンパイルおよびパッケージ化しました。

プログラムは正常に実行されており、プロジェクト フォルダーにもシンボル テーブルを取得しました。ただし、ブレークポイントなどを設定するために必要なシンボル ファイルを gdb に読み込ませることができません。

vlc フォルダーの下で、オブジェクト ファイルは次のように一覧表示されます。

./win32/*/*/*.o

実行可能ファイルは次の場所に保存されます

./win32/vlc-2.1.0-git/vlc.exe

Cygwin シェルの「gdb vlc.exe」はあまり有用なシンボルをロードしません。

特定のシンボル ファイルを読み込むために、symbol-table コマンドを試しました。ファイルをロードし、ブレーク プロンプトで関数を確認できます。しかし、プログラムを実行すると、次の警告が表示されました。

ブレークポイント 1 を挿入できません。

メモリ アドレス 0x2800 へのアクセス エラー: 入出力エラー。

Linux環境のようにデバッグできるように、gdbにシンボルファイルをフィードする方法はありますか?

なぜ私がこれを行っているのかに興味がある人のために、ここで少し背景を説明します。

DXVA2 インターフェイスのラップについて VLC コードベースを研究しています。プロジェクトは非常に大きく複雑で、多くの関数ポインタが C++ の継承とカプセル化を模倣しようとしており、理解が困難です。

私の目的は、Windows プラットフォームでのみ実行される DXVA2 (Microsoft DirectX Video Acceleration 2) h264 パス上の VLC ソース コードをステップ実行することです。AFAIK vlc には、コンパイルとデバッグに使用できる IDE プロジェクト ファイルがありません。VLC の Web サイトで提案されているため、クロス コンパイルを選択しました。シンボル ファイル、ソース コード、および実行可能ファイルを取得できれば、デバッグできると考えました。

助けていただければ幸いです。前もって感謝します。

4

1 に答える 1

1

私は解決策を見つけました。

gdb は、シンボル ファイルをロードする場所を知る必要があります。これは、パス関数を使用するか、パスにシンボル ファイルの場所を追加することで実行できます。

また、gdb は、ソース ファイルをロードする場所を知る必要があります。これは、ディレクトリ関数を実行するか、プログラムの開始時に指定することができます。

これが私がすることです:

これを .bashrc ファイルに追加します。

PATH=$PATH:[vlc proj folder]

export PATH

次に、次のように gdb を起動します。

gdb `find [vlc proj folder] -type d -printf '-d %p '` vlc.exe

:)

于 2012-04-06T00:19:11.570 に答える