Как получить след выполнения lli
Есть ли способ получить след выполнения lli. В качестве примера для данной программы:
define dso_local i32 @main() {
%1 = alloca i32, align 4
store i32 1, i32* %1, align 4
%2 = load i32, i32* %1, align 4
ret i32 %2
}
Я хотел бы иметь некоторые выходные данные, такие как:
$ lli test.ll -trace
%1 = alloca(4)
st %1, 1 ; [%1] = 1
ld %1 -> %2 ; %2 = 1
ret %2 ; ret 1
Я нашел проект XRay, но он кажется сложным. Есть ли какие-либо родные способы для вывода трассировки выполнения?
1 ответ
Я не нашел его и в итоге написал что-то достаточно общее для моих нужд, но даже не подходящее для общего использования. Одна большая проблема заключается в том, что любой код может вызывать собственный код, и большая часть кода делает это очень часто, поэтому трассировщик отслеживает только несколько инструкций, прежде чем обнаруживает CallInst, который он не может обработать.
Если вас интересуют только очень короткие последовательности инструкций, функции в Analysis/ConstantFolding.h могут быть полезны... или нет, это зависит от вашей цели. Если вам нужно написать трассировщик самостоятельно, вы можете поискать код, который использует InstVisitor, часть этого кода может быть пригодной для использования, повторного использования или хорошей отправной точкой. Удачи.