2012-03-30 2 views
0

Я пишу простую программу NDK, у которой есть журнал, который работает в другом потоке.Программа NDK, убитая SIGSEGV

Моя программа запускается успешно, но после этого программы завершают работу, и иногда она прекращает работу после запуска моего кода на C++ и работает правильно. Кто-нибудь знает, почему моя программа завершилась после запуска кода.

, когда я использую Трассирование отлаживать свою программу он говорит мне +++ убит SIGSEGV +++

semget(0x1c, 0xbe9222e8, 0x10, 0xffffffff) = -1 EINTR (Interrupted system call) 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
msgget(0x1, 0xbe922430, 0x418fce8c, 0xa8121b40) = 0 
semget(0x1c, 0xbe9222e8, 0x10, 0xffffffff) = -1 EINTR (Interrupted system call) 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
--- SIGSTOP (Stopped (signal)) @ 0 (0) --- 
msgget(0x1, 0xbe922430, 0x418fce8c, 0xa8121b40) = 0 
semget(0x1c, 0xbe9222e8, 0x10, 0xffffffff <unfinished ...> 
+++ killed by SIGSEGV +++ 

Если я отключил нить все работает отлично, может быть Logging в другом потоке с LogCat не является безопасным

+0

Похоже, что ваш код на C++ выполняет segfault, но для этого есть много причин, которые нелегко обнаружить без дополнительной информации и примеров вашего кода. Это может быть легко, что вам просто нужно убедиться, что поток журналов остановлен и уничтожен ** до того, как ** выйдет главная программа, в противном случае она может ссылаться на внутреннюю ссылку на некоторую память, которая больше недействительна для ссылки, то есть основной поток пропал , и ОС теперь segfaults регистратор, когда он пытается получить доступ к некоторым из этой памяти. Однако, без кода и дополнительной информации, это трудно понять наверняка. – waxspin

+0

@waxspin: Спасибо за ваш ответ. Я ссылаюсь на свои коды здесь. Я надеюсь, что вы можете мне помочь. [thread] (http://kge.svn.sourceforge.net/viewvc/kge/trunk/engine/KGEmain/KgeThread.cpp?revision=613&view=markup) [logger] (http: //kge.svn.sourceforge. net/viewvc/kge/trunk/engine/KGEmain/Logger.cpp? revision = 609 & view = markup) [мой тестовый код] (http://kge.svn.sourceforge.net/viewvc/kge/trunk/tests/01% 20Logger% 20test/main.cpp? Revision = 606 & view = разметка) мой проект является кросс-платформой, см. Код с препроцессором KGE_PLATFORM_ANDROID – kochol

ответ

0

@waxspin Вы были правы, моя программа выходит до того, как уничтожена нить журнала.