Как Вы перечислили бы доступные функции, и т.д. содержавшие в скомпилированной библиотеке?

Проблема заключалась в том, что наш разъем Elasticsearch имел конфигурацию key.ignore, установленную на true.

Мы обнаружили эту строку в источнике Github для коннектора (в DataConverter.java ):

final Long version = ignoreKey ? null : record.kafkaOffset();

Это означало, что с key.ignore=true операции индексирования, которые были будучи сгенерированным и отправленным в Elasticsearch, фактически были «без версии» ... в основном, последний набор данных, полученный Elasticsearch для документа, заменит любые предыдущие данные, даже если это были «старые данные».

При просмотре файлов журнала у соединителя, похоже, есть несколько потоков потребителей, которые читают исходную тему, а затем передают преобразованные сообщения в Elasticsearch, но порядок их передачи в Elasticsearch не обязательно совпадает с порядком тем.

Используя key.ignore=false, каждое сообщение Elasticsearch теперь содержит значение версии, равное смещению записи Kafka, и Elasticsearch отказывается обновлять данные индекса для документа, если он уже получил данные для более поздней «версии».

Это было не только , только , что исправило это. Нам все еще пришлось применить преобразование к сообщению Debezium из темы Кафки, чтобы получить ключ в формате простого текста, которым Elasticsearch был доволен:

"transforms": "ExtractKey",
"transforms.ExtractKey.type": "org.apache.kafka.connect.transforms.ExtractField$Key",
"transforms.ExtractKey.field": "id"

12
задан Anthony 24 December 2008 в 19:53
поделиться

5 ответов

Можно использовать команду nm для списка символов в статических библиотеках.

nm -g -C <libMylib.a>
21
ответ дан 2 December 2019 в 03:12
поделиться

Для инструментов Microsoft,"link /dump /symbols <filename>"предоставит Вам окровавленную подробную информацию. Существуют, вероятно, другие пути (или опции) для предоставления более легкого для чтения списка.

7
ответ дан 2 December 2019 в 03:12
поделиться

Для двоичных файлов ELF можно использовать readelf:

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt

-s: символы списка -W: не сокращайте слишком длинные имена

Команда awk затем отфильтрует все функции, и C++ filt не исказит их. Это означает, что преобразует их из внутренней схемы именования, таким образом, они будут отображены в человекочитаемой форме. Это производит имена, подобные этому (взятый от boost.filesystem lib):

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()

Без C++ filt, имя отображено как _ZN5boost9exceptionD0Ev

11
ответ дан 2 December 2019 в 03:12
поделиться

В соответствии с Linux/Unix можно использовать objdump -T перечислять экспортируемые символы, содержавшиеся в данном объекте. В соответствии с Windows существует dumpbin (IIRC dumpbin /exports). Обратите внимание, что имена функций C++ искажаются для разрешения перегрузок.

Править: после наблюдения anwser codelogic я помнил, что objdump также понимает-C для выполнения de-искажения.

6
ответ дан 2 December 2019 в 03:12
поделиться

используйте эту команду:

objdump-t "Ваша-библиотека"

Это распечатает больше, чем Вы хотите - не только имена функций, но и вся таблица символов. Проверьте различные атрибуты символов, которые Вы получаете, и Вы сможете разобраться в функциях от переменных и материала.

4
ответ дан 2 December 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: