Я хочу определить, какие функции отвечают за перетаскивание между Firefox и файловым менеджером, например Nautilus или Dolphin .Сначала я попытался просмотреть исходный код Firefox в надежде найти правильную функцию, но есть более 3600 строк, которые содержат «drag» и «drop» в кодовой базе Firefox, и единственные упоминания, которые я мог найти, были для DOMи HTML Drag and Drop API, а не перетаскивание из браузера во внешнее приложение.В любом случае ответственная функция может находиться в одной из зависимостей Firefox, а не в самом коде Firefox.
Поэтому я подумал, что мог бы использовать GDB, в частности команду record function-call-history
.Мой план действий был:
- установить символы отладки
- запустить Firefox
- подключить GDB к процессу
- начать запись
- сделайте перетаскивание
- остановите запись
- посмотрите, какие функции называются
Однако я столкнулся с некоторыми препятствиями.Прежде всего, я не могу использовать аппаратную трассировку.
(gdb) record btrace bts
Target does not support branch tracing.
(gdb) record btrace pt
GDB does not support Intel Processor Trace.
Следовательно, я вообще не могу записать function-call-history
.
(gdb) record full
(gdb) record function-call-history
You can't do that when your target is `record-full'
Однако я могу использовать record full
для обратной отладки.К сожалению, поскольку некоторые инструкции AVX не поддерживаются в этом режиме , я не могу использовать его в Firefox, не перекомпилировав его из исходного кода, и даже тогда я не уверен, что GDB будетвозможность записать его.
Но, может быть, я здесь лаю не то дерево, и есть гораздо более простой способ выяснить, какую функцию Firefox использует для перетаскивания в файловый менеджер, как характерный сигнал, которыйграфические процессы используют для перетаскивания или как-то связаны с тем, как подключается X-сервер.
Я нахожусь на Ubuntu 18.04, поэтому версия GDB - 8.1-0ubuntu3 .Я почти уверен, что это до 8.1-1 , поэтому я предполагаю, что именно поэтому Intel Processor Trace не поддерживается.