2017-02-08 2 views
0

Мой пропуск вставляет функции в определенные моменты, и эти функции собирают некоторую информацию. В конце модуля я хочу отображать все, что я собрал, таким образом, я хочу вставить функцию в конец модуля, который будет выполнять задание на печать для меня. У меня есть проблема с обнаружением самого конца модуля, чтобы вставить функцию прямо перед ним. Помощь и руководство будут оценены!Как вставить вызов функции в самом конце модуля в проходе LLVM?

+0

Вы хотите вывести это в конце модуля? Или вы хотите, чтобы вы выходили до завершения программы? – Brian

+0

До завершения программы. –

+0

Вы должны посмотреть на использование atexit(). – Brian

ответ

1

Я думаю, что нет простого и простого способа сделать это. Вам нужно искать два вида точек выхода в коде.

1) В коде могут быть вызовы таких функций, как exit(), который будет точкой выхода программы. Поэтому вам нужно искать тех, кто находится в проходе, и вставлять перед ними свой вызов функции. Если вы не хотите испытывать проблемы, чтобы проверить каждую инструкцию в коде, то может быть, вы можете вручную заменить вызовы на exit() в функции кода с помощью новой функции выхода (что-то вроде exit_()), которое содержит вызов функцию, которую вы хотите вызвать, а затем фактический вызов функции exit().Этот последний подход требует, чтобы у вас был доступ к коду заранее.

2) Программа выйдет в конце функции ввода (обычно main). Таким образом, вы можете проверить, совпадает ли имя функции с потенциальной функцией точки входа или нет, и вставить вызов функции перед оператором return. Если у него нет оператора возврата, вставьте его в конце всех инструкций.

+0

Справа. Спасибо за подробный ответ. Итак, независимо от того, как программа заканчивается, функция, вызываемая для завершения ocur, - это exit(), поэтому я могу ее заменить или вставить мою функцию перед командой exit()? –

+0

Да, вы можете вставлять свои вызовы до '' 'exit()' '', и вам также необходимо позаботиться о функции входа, как описано в пункте 2 в ответе выше. – deLta

+0

Yup. Итак, имя функции, где exit должно содержать запись, например, main()? –