2015-06-03 4 views
1

У меня есть программа без исходного кода.strace 'open' вызывает в библиотеке исполняемого файла

Когда я запустил его, у меня есть ошибка «Не удается открыть файл ...» в журналах.

Я назвал Трассирование проследить открытых вызов на ядре, таким образом:

strace -e trace=open,close,read,write,connect,accept your-command-here 

Тем не менее, кажется, что нет ни один из открытых вызовов Я ожидаю (что должно до этого в журнале говорится: «Не удается открыть файл ...»)

Исполняемый действительно делегировал вызов в библиотеку tierce. Кажется, что strace отслеживает только вызовы из исполняемого файла на ядре, а не те из библиотек.

Я пытался использовать ltrace, чтобы проследить, что происходит в последующих библиотеках, но он не отображать ту же информацию, как трассирования только функцию звонки (которые не являются читаемым человеком).

Есть ли способ запустить strace на исполняемый файл и либрав за одно и то же время?

ответ

2

strace должен показывать все звонки open. Однако:

  • Возможно, ваше приложение вызывает подпроцесс для выполнения работы. В этом случае вы можете добавить опцию -f.
  • С другой стороны, он может выполнять работу, открыв сокет (или подобное) соединение с другим процессом. В этом случае вы не увидите никаких следов. Аналогично, если вы используете интерфейс syslog, то фактическая работа может быть выполнена вне вашего процесса, возможно, в ядре, где вы не можете отслеживать этот инструмент.
+0

опция «-f» отлично работает! Спасибо Томасу за вашу помощь – matt