2

ARM Cortex A9ボード(Odroid X2)で実行されているOpenCV 2.4.6アプリケーション(TBBでコンパイル)があります。アプリケーションを実行するとセグメンテーション違反が発生するので、まず gdb でデバッグします。gdb はバックトレースを終了できず、次のメッセージが表示されます:

Backtrace stopped: previous frame identical to this frame (corrupt stack?)

しかし、TBB につながるいくつかのトレースを出力しました。

#3  0x001752f4 in tbb::interface6::internal::start_for<tbb::blocked_range<int>, (anonymous namespace)::ProxyLoopBody, tbb::auto_partitioner con)
()
#4  0x00502d9e in tbb::internal::custom_scheduler<tbb::internal::IntelSchedulerTraits>::local_wait_for_all(tbb::task&, tbb::task*) ()
#5  0x00503610 in tbb::internal::arena::process(tbb::internal::generic_scheduler&) ()
#6  0x00506aa0 in tbb::internal::market::process(rml::job&) ()
#7  0x0050773e in tbb::internal::rml::private_worker::run() ()
#8  0x00507a7a in tbb::internal::rml::private_worker::thread_routine(void*) ()
#9  0xb6fafcb0 in start_thread () from /usr/lib/libpthread.so.0

TBB なしで実行してみましたが、問題なく動作します。しかし、TBB が必要なのは、アプリケーションの実行速度が 2 ~ 3 倍になるためです。そのため、セグメンテーション違反とマルチスレッドの問題に関する以前の経験に基づいて、Valgrind を使用してデバッグします。残念なことに、Valgrind が停止し、メッセージが表示されます。カーネルに関連しているようです (?):

[27140.140000] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[27140.140000] pgd = ebf10000
[27140.140000] [00000000] *pgd=6a02e831, *pte=00000000, *ppte=00000000
[27140.140000] Internal error: Oops: 17 [#1] PREEMPT SMP ARM
[27140.140000] Modules linked in: r8712u(C) ath9k_htc ath9k_common ath9k_hw ath mac80211 cfg80211 rfkill vfat fat smsc95xx uvcvideo usbnet vide6
...
[27140.140000] Code: e3110001 0a00004d e59f1150 e5911000 (e7912102) 
[27140.140000] ---[ end trace ce3bd4d9f0a91ec4 ]---
[27140.140000] note: memcheck-arm-li[5626] exited with preempt_count 1

私は Linux とデバッグ ツールにかなり慣れていないので、何が起こったのかを理解するのを手伝ってくれれば、とても感謝しています。アプリケーションの動作が悪いのでしょうか? クラッシュの原因は Valgrind ですか? Linux を再インストールする必要がありますか?

そうそう、メッセージの後にコンソールに何も入力できませんが、デバイスの電源をオフにしてから再度オンにすると、Linux を再び使用できるようになります。ありがとう!

4

0 に答える 0