LINUX.ORG.RU

Inferior 1 (LWP 0) exited with code 01

 ,


0

1

Всем привет

Пытаюсь скомпилить игруху(warsow). Компилируется нормально. Но призапуске ничего не происходит - думает несколькосекунд и возвращается в консоль.

Что есть: OS: NetBSD8/amd64 ktruss: https://transfer.sh/Iy1p1/warsow.txt gdb: (gdb) run Starting program: /usr/pkg/bin/warsow [Inferior 1 (LWP 0) exited with code 01]

Куда копать не знаю. Есть какие-ниубдь мысли ?

Спасибо

Ответ на: комментарий от starsnet

Насколько я понимаю, просто программа завершила работу, вернув код 1. Т.е. всё работает нормально, программа вызвала exit(1).

Legioner ★★★★★ ()
Ответ на: комментарий от starsnet
void
print_exited_reason (struct ui_out *uiout, int exitstatus)
{
  struct inferior *inf = current_inferior ();
  const char *pidstr = target_pid_to_str (ptid_t (inf->pid));
  
  annotate_exited (exitstatus);
  if (exitstatus)
    {
      if (uiout->is_mi_like_p ())
        uiout->field_string ("reason", async_reason_lookup (EXEC_ASYNC_EXITED));
      uiout->text ("[Inferior ");
      uiout->text (plongest (inf->num));
      uiout->text (" (");
      uiout->text (pidstr);
      uiout->text (") exited with code ");
      uiout->field_fmt ("exit-code", "0%o", (unsigned int) exitstatus);
      uiout->text ("]\n");
    }
  else
    {
      if (uiout->is_mi_like_p ())
        uiout->field_string
          ("reason", async_reason_lookup (EXEC_ASYNC_EXITED_NORMALLY));
      uiout->text ("[Inferior ");
      uiout->text (plongest (inf->num));
      uiout->text (" (");
      uiout->text (pidstr);
      uiout->text (") exited normally]\n");
    }
}
i-rinat ★★★★★ ()

Куда копать не знаю. Есть какие-ниубдь мысли ?

Открываешь в gdb, ставишь бряк на «exit», запускаешь. Смотришь по бектрейсу (bt), где вызывается exit. Ищешь причину, по которой вызывается эта ветка кода. Скорее всего, программа какой-нибудь критичный ресурс не смогла загрузить, и без сообщений об ошибках просто вызывает exit().

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

точно. забыл run)

(gdb) run Starting program: /usr/pkg/bin/warsow bt[New LWP 5] bt Thread 1 hit Breakpoint 1, 0x000075f2cd6dfaa0 in exit () from /usr/lib/libc.so.12

Теперь такое сообщение)

Что-то с библиотекой?

starsnet ()
Ответ на: комментарий от starsnet

(gdb) bt #0 0x00007cbfa9cdfaa0 in exit () from /usr/lib/libc.so.12 #1 0x00000000004597eb in ?? () #2 0x000000000045157d in ?? () #3 0x00000000004484bb in ?? () #4 0x0000000000419cea in ?? () #5 0x000000000045a3ba in ?? () #6 0x0000000000404a2b in ?? () #7 0x00007cbfab3f5000 in ?? () #8 0x0000000000000001 in ?? () #9 0x00007f7fff6bbaf8 in ?? () #10 0x0000000000000000 in ?? ()

starsnet ()
Ответ на: комментарий от starsnet

Переводы строк поехали, тяжело читать. Оберни в [code][/code]. Язык разметки описан тут: https://www.linux.org.ru/help/lorcode.md

Хотя тут сразу видно, что отладочной информации не сохранилось, поэтому везде вопросики. Чтобы отлаживать код, нужна отладочная информация. А ещё лучше — отладочная сборка, без включенных оптимизаций.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

с кодами - да, как раз хотел спросить. спасибо за ссыль, исправлюсь)

по отладочно инфе.. возможно, надо компилить с ключом -g ?

что-то типа make CFLAGS=-g ?

потому что я компилил в обычном режиме..

starsnet ()
Ответ на: комментарий от starsnet

Да, -g или -g3. И нужно удостовериться, что после сборки у тебя бинарники не обдираются. Зачастую во время выполнения make install вызывается strip, который удаляет отладочную информацию.

Если этот проект использует autotools, то есть большие шансы на то, что configure принимает параметр --enable-debug, который выключает оптимизацию (-O0), включает отладочную информацию (-g) и убирает вызов strip.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

добавил в Makefile:

САДФПЫ= -g3

перекомпилил.

результат не сильно отличается:

(gdb) run
Starting program: /usr/pkg/bin/warsow

Breakpoint 1, 0x00007418ce0dfaa0 in exit () from /usr/lib/libc.so.12
(gdb) bt
#0  0x00007418ce0dfaa0 in exit () from /usr/lib/libc.so.12
#1  0x000000000047e5b2 in ?? ()
#2  0x0000000000472c35 in ?? ()
#3  0x00000000004734dd in ?? ()
#4  0x0000000000467c6e in ?? ()
#5  0x0000000000426344 in ?? ()
#6  0x000000000047e647 in ?? ()
#7  0x00000000004047fb in ?? ()
#8  0x00007f7fdc803382 in _rtld () from /usr/libexec/ld.elf_so
#9  0x00007f7fffd5aa7c in ?? ()
#10 0x00007f7fffd5aa86 in ?? ()
#11 0x00007f7fffd5aa99 in ?? ()
#12 0x00007f7fffd5aa9f in ?? ()
#13 0x00007f7fffd5aab1 in ?? ()
#14 0x00007f7fffd5aac9 in ?? ()
#15 0x00007f7fffd5aad9 in ?? ()
#16 0x0000000000000000 in ?? ()
starsnet ()
Ответ на: комментарий от starsnet

И в том,и в том случае обе программы завершились корректно (т.е. не упали в обморок), но warsow ещё отрапортовал об ошибке (что не помешало ему отработать нормально).

yoghurt ★★★★★ ()
Ответ на: комментарий от starsnet

Тут отлаживать нечего, ибо всё завершается корректно.

Включай логи и смотри чего ей не хватает для жизни - может файлы какие найти не может или ещё чего. Можно стрейсом (или аналогом) проверить, к каким файлам оно обращается и вдруг чего не находит, например.

yoghurt ★★★★★ ()
Ответ на: комментарий от starsnet

Если отладочная информация в /usr/pkg/bin/warsow всё же есть, а не была strip’нута, то нужно смотреть на info proc mappings в gdb, чтобы выяснить, что было загружено по адресу 0x000000000047e5b2. Если это какая-то библиотека, нужно будет её пересобрать с отладочной инфой и повторить. В общем, обычная отладка.

i-rinat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.