Jump to content

Recommended Posts

Никто не собирал gdb пакет? Не хочется изобретать велосипед.

Или пойти и изобрести? У нас софтина одна явно требует чего-то особенного на кинетике и работать не хочет (виснет с 100% загрузкой одного ядра). Без gdb не разобраться, что тут не так.

Link to comment
Share on other sites

Этот Entware не совместим с собранными мной пакетами - ругается на них. Самопальные пакеты, собранные родной SDK нельзя одновременно с Enware использовать?

Вообще, этак Entware просто кладезь полезных прог. Было бы здорово понять, как их одновременно запускать.

Link to comment
Share on other sites

А могли бы ещё помочь допилить эти патчи для сборки с libthread_db. В toolchain эта либа не собирается, а привычной для OpenWRT галочки "Threads Debugging" (PTHREADS_DEBUG_SUPPORT) не найдено, да и упоминания этой константы тоже нет.

А то вот такое вылезает: warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

Link to comment
Share on other sites

А какие там патчи нужны? Впервые слышу об этом. Возьмите исходники тулчейна с https://github.com/ndmsystems/embtoolkit/tree/ndm-1.7.0, там кнопочка есть - Download zip,

соберите его самостоятельно, взяв нужный конфиг из директории configs. Для mipsel этот конфиг называется mipsel_gcc_4.9.2_uclibc.config, внутри есть параметр CONFIG_KEMBTK_UCLIBC_PTHREADS_DEBUG_SUPPORT, укажите ему "y". Собранную либу можно положить ко всем остальным, либо указать в gdb отдельно - set libthread-db-search-path [path]...

Link to comment
Share on other sites

Этот Entware не совместим с собранными мной пакетами - ругается на них. Самопальные пакеты, собранные родной SDK нельзя одновременно с Enware использовать?
Самопальные пакеты можно попробовать запустить в chroot-среде. Есть аплет chroot для busybox, есть отдельно в виде пакета coreutils-chroot.
Link to comment
Share on other sites

... внутри есть параметр CONFIG_KEMBTK_UCLIBC_PTHREADS_DEBUG_SUPPORT, укажите ему "y". Собранную либу можно положить ко всем остальным, либо указать в gdb отдельно - set libthread-db-search-path [path]...

Спасибо, не догадался собрать тулчейн, да и конфиг на знал, где брать. Собрал, положил в /opt/lib, также явно пробовал указать путь через libthread-db-search-path, но при старте потоков gdb всё так же ругается. Может нужно явно gdb пересобрать с этой либой?

Кстати, при старте дебажной версии v8 (именно она подвисает, ради неё вся работа), gdb странно ругается

(gdb) r
Starting program: /opt/usr/bin/d8 
warning: GDB can't find the start of the function at 0x2aaa8f60.

   GDB is unable to find the start of the function at 0x2aaa8f60
and thus can't determine the size of that function's stack frame.
This means that GDB may be unable to access that stack frame, or
the frames below it.
   This problem is most likely caused by an invalid program counter or
stack pointer.
   However, if you think GDB should simply search farther back
from 0x2aaa8f60 for code which looks like the beginning of a
function, you can increase the range of the search using the `set
heuristic-fence-post' command.
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
warning: GDB can't find the start of the function at 0x2aaa8f60.

Что бы это могло значить? Обычно это означает битый стек, кажется.

Ещё мне пришлось копировать бинарники из build_dir/target-ku_rd-mipsel-linux-uclibc/libv8/... т.к. те, что в пакете стрипнуты основательно и никакой debug информации уже не несут. Это как-то отключается через .config?

Самопальные пакеты можно попробовать запустить в chroot-среде. Есть аплет chroot для busybox, есть отдельно в виде пакета coreutils-chroot.

Александр, а gdb из Entware имеет поддержку потоков? или тоже нет?

Link to comment
Share on other sites

Если вы взялись за такой инструмент как gdb, то наверное не должны задавать такие простые вопросы новичков здесь, в этом месте? Ваша первая ошибка, вы пытаетесь использовать gdb, а не gdbserver, отсюда и вопросы про стрипнутые бинарики и отсутствие кучи информации. Откуда gdb знать, где ему взять исходники, если сборка осуществлялась в другом месте? Вторая ваша ошибка, это думать, что gdb нужно собирать явно с чем-то, а это совершенно не так, он собирается как отдельное приложение с привязкой к архитектуре и только. С таким подходом к делу, вам и Entware не поможет, но я все же дам вам несколько советов:

1. Вам необходимо использовать gdbserver на роутере, т.к. просто gdb использовать на нем бесполезно, его имеет смысл использовать только в том случае, если вы всю сборку осуществляете на самом роутере, а для этого на нем должны быть установлены gcc и binutils как минимум. Причина очевидна, gdb должно быть доступно место сборки.

2. Так как вы собираете приложение на компьютере, в качестве хоста, то gdb должно запускаться именно на нем. Вам необходимо настроить связку gdbserver на роутере и gdb на компе. На роутере приложения могут быть стрипнутыми, это никак не влияет на отладку, так как gdb будет брать информацию с того места, где вы собирали непосредственно само приложение с ключиком -g для отладки, естественно указав ему это приложение, оно как правило не будет стрипнутым.

3. Сложности могут возникнуть с библиотеками, их тоже необходимо собрать с ключиком -g и сохранить в отдельной директории для последующей их загрузки в gdb. В противном случае, вы не сможете получить полную отладку и если ошибка будет в какой-нибудь либе, то потеряете связь.

Все же, я бы настойчиво рекомендовал вам для начало почитать нужную литературу, по gdb очень много информации, и про удаленную отладку в частности...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...