私はwheezy:armhf chrootを使って実行しています。qemu ユーザーエミュレーション私のjessie:x86_64システムで。どういうわけか、git clone
特定のプライベートストアのaは、このシステムでの成功中にchrootの内部で停止します。これはバグかもしれません。誰が知っていますか?カルマを改善するために何が起こっているのか知りたかったです!
注:私が経験した静止現象はjessie:armel chroot内のgit-2.0でも発生しました...システム全体のシミュレーションでは静止現象は発生しません。だから掘り続けています。ゆがみ: armhfウサギの牡蠣、一つだけ選ばなければならないから…ネイティブマシンではテストできないですね…
だから。バッグはなく、git-dbg
私が直接巻きました。 wheezy:armhf chrootから:
sudo apt-get install build-essential fakeroot
sudo apt-get build-dep git
apt-get source git && cd git-1.7.10.4
DEB_CFLAGS_APPEND="-fno-stack-protector" DEB_CXXFLAGS_APPEND="-fno-stack-protector" DEB_BUILD_MAINT_OPTIONS=hardening=-stackprotector,-fortify DEB_BUILD_OPTIONS="noopt nostrip nocheck" fakeroot dpkg-buildpackage -j´getconf _NPROCESSORS_ONLN`
sudo dpkg -i ../git_1.7.10.4-1+wheezy1_armhf.deb
私が読む限りgccドキュメント、設定DEB_CFLAGS_APPEND
およびDEB_CXXFLAGS_APPEND
追加では-fno-stack-protector
必要ありませんが、とにかく必ず)
次に、qemuの組み込み機能を使用します。gdb_stub私がやっているchrootの内部:
QEMU_GDB=1234 git clone /path/to/breaking/repo /tmp/bla
qemu内でデバッグすると、次のようになります。サポートされていないシステム 26間違い。
gdb-multiarch
chrootの外部から起動して接続します。
gdb-multiarch -q
(gdb) set architecture arm # prevents "warning: Architecture rejected target-supplied description"
(gdb) target remote localhost:1234
(gdb) set sysroot /opt/chroots/wheezy:armhf
(gdb) file /opt/chroots/wheezy:armhf/usr/bin/git
Reading symbols from /opt/chroots/wheezy:armhf/usr/bin/git...done. # good! has debug symbols!
(gdb) list # works! code is not stripped
(gdb) step
Cannot find bounds of current function # meh...
(gdb) backtracke
#0 0xf67e0c90 in ?? ()
#1 0x00000000 in ?? () # wtf?
continue
複製が発生するように送信すると中断が発生し、送信すると無視されますctrl-c
。
コアファイルを作成してgdb(chroot内)にロードすると、破損したスタックが提供されます。
gdb -q /usr/bin/git qemu_git_20140514-160951_22373.core
Reading symbols from /usr/bin/git...done.
[New LWP 22373]
Cannot access memory at address 0xf67fe948
Cannot access memory at address 0xf67fe944
(gdb) bt
#0 0xf678b3e4 in ?? ()
#1 0xf678b3d4 in ?? ()
#2 0xf678b3d4 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
今私は迷子になりました。
何が問題なの? qemu-user-emulationの一部の詳細を見逃しましたか?完全にシミュレートされたアームマシンを使用する必要がありますか?クロスデバッグ誤解? gdb-multiarchに制限がありますか?デバッグパッケージを作成しますか?
提案、指示、ヒント、ヒント、コメントなどを送信していただきありがとうございます。
現在の最良の推測はgit
複製が行われるという事実に基づいていますが(プロセス/スレッドの両方を見ることができます)、QEMU_GDB
qemuを使用した後に環境変数は設定されませんでした。したがって、初期プロセスだけがgdbに入ります。バラよりここ例えば。
しかし、それでも親プロセスを正しくデバッグできるはずですか? hello-world MWEを簡単にクロスデバッグできます。
答え1
この「git clone」の特定の中断はqemu関連の問題であることがわかりました...
gitでコンパイルされたものを使用するとqemu-user-static
(現在のjessieのqemu-2.0.0 + dfsg-4 + b1には修正が少なく、私の場合は機能しません...):
git clone git://git.qemu-project.org/qemu.git $HOME/qemu.git && cd $HOME/qemu.git
./configure --static --disable-system --target-list=arm-linux-user --prefix=$HOME/qemu.install --disable-libssh2
make && make install
sudo cp $HOME/qemu.install/bin/qemu-arm /opt/chroots/wheezy:armhf/usr/bin/qemu-arm-static
だから...
しかし、複雑なプログラムについてはまだ追跡を得ることはできません...