170 похожих чатов

Добрый день. Нету желающего поучаствовать в разработке библиотеки трассировки вызова

функций?

Идея в создании библиотеки, с которой необходимо слинковаться и интерфейса под отображение информации трассировки. Знаю, как такое провернуть под gcc/clang, но msvc видимо не позволяет или хз.

Необходимо будет оптимизировать код трассировки, т.к. в моем случае он добавлял слишком большие накладные расходы, что было не позволительно.

Библиотека предполагается практически полностью/полностью свободной (MIT/Apache 2.0, например).

Интерфейс будет на Qt, поэтому его знание на мин. уровне тоже важно. Если интересно, то буду рад 1-2 участникам, вводную инфу я соответственно распишу, чтобы копать не надо было долго. Спасибо

9 ответов

24 просмотра

почему нельзя, скажем, доработать инструментацию в том же кланге?

TTY- Автор вопроса
Vlad
почему нельзя, скажем, доработать инструментацию в...

На основе этой инструментации и будет. Что то забыл дописать

TTY
На основе этой инструментации и будет. Что то забы...

Можно сделать гораздо лучше, если инструментацию вставлять не в ассемблер, а прямо в исходный код. libclang позволяет. Там есть компонент "rewriter" для того. Потом текст (с инструментацией) компилировать можно хоть msvc.

Еще можно посмотреть в сторону TXL (вроде, txl.ca), но он грамматику современного c++ не осилит имхо

Kirill Frolov
Еще можно посмотреть в сторону TXL (вроде, txl.ca)...

если они специально С++ не поддерживают, то не осилят, да грамматика С++, к сожалению, шире, чем содержимое annex A (grammar summary)

TTY- Автор вопроса
Kirill Frolov
Можно сделать гораздо лучше, если инструментацию в...

Его я не пробовал, но пробовал копать в сторону плагинов для clang. Та еще яма(имхо). Да и в чем отлижие между libclang и -finstrument-functions на уровне накладных расходов? Как я понял одно и тоже. А аргументы я думал из символов отладки подтягивать, хотя тут да, может быть посложнее

TTY
Его я не пробовал, но пробовал копать в сторону пл...

я сделал на libclang. для голого C правда. не поддерживаются вычисления в коде исполняемом до функции (когда размер массива в аргументе функции -- выражение вычисляемое в рантайме). В C++ аналогично, в конструкторах инициализация членов класса делается как бы до начала тела функции конструктора. Кажется не очень сложно доделать. Там твой визитор вызывают для каждого грамматического элемента. Соответственно в начало и конец функции, перед/после фигурных скобок втыкается инструментация. Еще в return. Еще в throw надо, в catch, про конструкторы сказал, еще try-блоки которые вокруг всей функции (до фигурных скобок). С аегументами и возвращаемыми значениями просто, их нужно просто перечислить и передать в макрос, там уже средствами настоящего компилятора запишется как и куда нужно. В целом трансформация кода ограничивается вставкой вызова макросов в нужных местах. Там какой-то мудрой логики -- нет.

TTY
Его я не пробовал, но пробовал копать в сторону пл...

Отличие в том, что в случае с -finstrument-functions аргументы не пойми где лежат (в регистрах, стеке, везде по-разному). А так компилятору будет дан код который с ними будет что-то делать и онсам что надо и куда надо положит. Потом с -finstrunent... компилятор вынужден при вызове функций инструментации сохранять все регистры которые по ABI могут портиться. Когда инструментация встроена в код, он уже знает что (не) портится. Вообще для инструментации на уровне ассемблера я бы рекомендовал обратить взор на функцию mcount (опция -pg). Но с ней проблема с tail call optimization и решения там кажутся не нормальными.

TTY- Автор вопроса
Kirill Frolov
я сделал на libclang. для голого C правда. не подд...

Я в плане документации имел ввиду. Много недокументированных функций и структур попадались,поэтому забросил. Но мб ещё раз посмотрю. А за инфу спасибо. Подумаю над этим

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта