問題タブ [gdbserver]
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.
c - BusyBox で ARM をデバッグ シンボルなしでクロス コンパイルする
ARM926EJ-S rev 5 (v5l) で実行される C プログラムをデバッグしようとしています。ソフトウェアは、std とクロスコンパイルされました(静的にリンクされています)。arm-linux-gnueabi コンパイラ (シナプス経由でインストール)。Ubuntu 13.04 64bitを実行しています。デバイスにはBusybox v1.18.2があります。gdbserver ( host=arm-linux-gnueabi を使用) と gdb ( target=arm-linux-gnueabi を使用) を正常にコンパイルし、ローカルで実行されている gdb を介して組み込みデバイスでプログラムを開始できます...私の問題は、適切なバックトレース出力がありません。
gdb のメッセージ:
-g、-g3 -gdwarf-2、-ggdb、-ggdb3を使用してソフトウェアをコンパイルしようとしましたが、違いはありませんでした。
ここで何が欠けているのか、誰にも分かりますか?
これはおそらく BusyBox の問題ですか、それともホスト システムに追加のライブラリが必要ですか?
また、ほぼ同じ出力でexecinfo.hから関数backtrace_symbolsを試しました...
返信ありがとうございます。
c++ - リモート デバッグの問題
ローカル ネットワーク内のサーバーでアプリケーションをリモート デバッグしようとしています。
サーバ:
ワークステーション:
ワークステーションで「Hello World」アプリをコンパイルしたところ、ワークステーションとサーバーの両方でエラーなしで実行されました。
これはサーバーとワークステーションの両方で機能します
シェル 1:
シェル 2:
これは動作しません
サーバ:
ワークステーション:
GDB 出力
gdbserver は着信接続があることを通知しますが、hello world メッセージを書き込みません。
何か案は?
PS しばらく前に、この質問を linuxquestions.org に投稿しました。私はそれが適切なフォーラムではなかったと思うので、ここで運試しをしています。
android - Android GDB が C++ 共有ライブラリをロードしていません
c/c++ で作成した共有ライブラリをデバッグしようとしましたが、Eclipse を使用してデバッグできません。ブレークポイントがヒットしないように設定しinfo sharedlibrary
、gdbで実行した後、ライブラリが存在しないことを確認して、次のようになりました(libtest-java.soと呼ばれます)
このライブラリを手動でロードする方法はありますか?? メイクファイルでは、次を使用します。
$(CLEAR_VARS) を含める
お時間をありがとうございました!
assembly - gdb を使用して qemu でデバッグするときの間違ったメモリ位置
私はアセンブラで小さなカーネルを書いています。QEMUで実行していますが、いくつかのバグに問題があります。ここで、dbg を使用してカーネルをデバッグします。だから私はそれを次のように組み立てました:
次に、QEMU で次のように実行します。
次に、gdb に接続します。
welcome
文字列を指すカーネルで名前が付けられたラベルがあります。テスト中にその文字列を調べようとしたところ、次の結果が得られました。
ラベルは次のように定義されます。
ご覧のとおり、gdb はウェルカムが null バイトで始まるふりをしていますが、定義上はそうではありません。ただし、カーネルはラベルを正しく使用しているため、私のコードの問題ではないようです。メモリの他の部分を調べると、ロードされたカーネルとまったく一致しません。
マシンが正しく動作しているのに、仮想マシンのメモリがロードされたカーネルと一致しない理由を知っている人はいますか?
c - GDB がライブラリからシンボルをロードしない
GBD を使用して Android のネイティブ コードをデバッグしようとしています。コードは私が作成したものではなく、Android プロジェクトにもないため、ndk-gdb ツールを使用できません。Androidマシンでgdbserverを使用し、通常のGDBプログラムを使用してMacから接続します。すべてのライブラリ (objdump ツールによるとシンボルがあるはずです) をロードしようとしましたが、gdb は (gdb コマンド「info sharedLibrary」によると) シンボルをロードしないと通知します。これらは私が取ったステップです:
- Android マシンで gdbserver を起動します
バイナリのデバッグ バージョンで GDB を起動します。
gdb symbols/system/bin/mediaserver
次のコマンドは gdb 自体で実行されます
シンボルを含むライブラリを探す場所を gdb に指示します
(gdb) set solib-search-path symbols/system/lib
ソースファイルの場所をgdbに伝える
(gdb) directory /sources
リモート ターゲット (Android マシン) に接続する
(gdb) target remote 192.168.1.10:5039
GDB は実行中のバイナリに正常に接続し、実行を一時停止して続行できます。ただし、関数名や行番号などのデバッグ情報は表示されません。住所しか表示されません。使用されているライブラリのステータスを確認すると、gdb がシンボルを持っていないと考えていることがわかります。
- gdb のコマンド:
(gdb) info sharedLibrary
From To Syms Read Shared Object Library
0x00003700 0x0000ff0c Yes /symbols/system/bin/linker
No libc.so
No libstdc++.so
No libm.so
No liblog.so
No libcutils.so
No libspeexresampler.so
No libaudioutils.so
No libgccdemangle.so
No libamplayer.so
たとえば、最後のライブラリです。file コマンド (gdb ではありません) で確認すると、ストリップされていないライブラリであることがわかります (ライブラリは "symbols/system/lib" フォルダーにあります)。
file libamplayer.so
出力:
libamplayer.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped
objdump コマンドは、その中に多くのシンボルを表示します (非常に長いため、出力は表示しません)。では、なぜ gdb はこのライブラリのシンボルを認識しないのでしょうか? 少なくとも行番号と関数名は、削除されていないバージョンのライブラリに存在すると思いました。それとも私が間違っていますか?誰かが私にもっと洞察を与えることができれば、とてもうれしいです。
ありがとう!
システム情報:
GDB バージョン: Mac OS X Mavericks の 7.3.1-gg2
c++ - ブレークポイントがヒットしたときにのみ gdbserver に接続する方法は?
gdb では、次の内容の .gdbinit ファイルを作成します。
これにより、gdb はプログラムを実行し、それらのブレークポイントで停止します。
どうすればgdbserverで同じことができますか? 例: ブレークポイントに到達した場合にのみ接続を受け入れるために停止しますか?