2013-11-14 2 views
2

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

Если я выполняю живую отладку, я могу заменить все регистры на те, которые пришли из контекста микропотоков. Я написал макрос, чтобы сделать именно это, и он работает очень хорошо.

Проблема заключается в том, что я не могу изменить значения регистра, если я выполняю отладку после вскрытия (из основного файла). В таком случае я не могу сказать GDB изменить его концепцию того, что представляет собой текущий кадр, поскольку в этом случае все регистры считаются доступными только для чтения.

Есть ли способ рассказать GDB о моем пользовательском контексте управления?

Шахар

+0

Привет, я сталкиваюсь с тем же вопросом, нашли ли вы какое-либо решение? Я просматриваю 'libthread-db', который можно передать в GDB (см. [Doc] (https://sourceware.org/gdb/onlinedocs/gdb/Threads.html)). Возможно, можно реализовать 'gdb/common/gdb_thread_db.h', а затем использовать эту библиотеку, но я все еще боюсь с этим. Благодаря! – d6bels

+0

На данный момент нет решения. Однако я посмотрю, что вы предложили. –

+0

Я попытался реализовать проект этого libthread_db, который может взаимодействовать с моей структурой пользовательского потока. До сих пор я установил несколько идентификаторов потоков и таких атрибутов, но я все еще зациклился на том, как GDB понимает контекст и заменяет потоки там, где они были. – d6bels

ответ

0

Там не простой, встроенный способ сделать это в GDB.

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

Смежные вопросы