Как получить след выполнения lli - PullRequest
0 голосов
/ 28 октября 2018

Есть ли способ получить след выполнения 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 Ответ

0 голосов
/ 28 октября 2018

Я не нашел один и закончил тем, что написал что-то достаточно общее для моих нужд, но даже почти не подходящее для общего использования.Одна большая проблема заключается в том, что любой код может вызывать собственный код, , и большая часть кода делает это очень часто , поэтому трассировщик отслеживает только несколько инструкций, прежде чем обнаружит CallInst , который он не может обработать.

Если вас интересуют только очень короткие последовательности команд, функции в Analysis / ConstantFolding.h могут быть полезны ... или нет, это зависит от вашей цели.Если вам нужно написать трассировщик самостоятельно, вы можете поискать код, который использует InstVisitor , часть этого кода может быть пригодной для использования, многократного использования или хорошей отправной точкой.Удачи.

...