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

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

функций?

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

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

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

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

9 ответов

21 просмотр

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

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 правда. не подд...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта