список всех звонков в мою библиотеку - PullRequest
2 голосов
/ 25 апреля 2011

Я создаю разделяемую библиотеку на C, которую используют другие программы.Иногда эти другие программы аварийно завершают работу из-за ошибки в моей общей библиотеке.При воспроизведении подобных ошибок мне очень полезно знать, какие функции из моей библиотеки вызываются, с какими аргументами и в каком порядке.Конечно, я могу добавить printf() вызовы ко всем моим функциям или добавить точки останова для всех них, но я думаю, что просто должен быть лучший способ определить это.

Редактировать: так как я делаюна OSX dtrace и связанный с ним скрипт dapptrace кажутся многообещающими.Однако, покопавшись в документации, я все еще немного растерялся.

Скажем, моя библиотека / path / to / libmystuff.so и у меня есть программа test , который ссылается на эту библиотеку.Используя dtrace , как вызвать список всех вызовов функций, находящихся в libmystuff.so ?

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Вы можете использовать ltrace для этой цели, если вы работаете в системе Linux. На оригинальном плакате в комментариях ниже показано решение, которое работает на Mac OS X с использованием dtrace.

1 голос
/ 25 апреля 2011

Я предполагаю, что вы работаете в Unix. Используйте gdb для целей отладки. Если ваша программа потерпела крах. Вы можете использовать файл ядра, созданный для просмотра трассировки стека. Он предоставит всю запрашиваемую вами информацию.

для получения дополнительной информации о проверке трассировки стека с помощью gdb с файлом core см. здесь.

0 голосов
/ 25 апреля 2011

Вы также можете регистрировать вызов функций в файловой системе со всеми подробностями, такими как имя функции, аргументы и т. Д. (Обычно регистрация - это помощь в приложении «Сервер-клиенты», но я не уверен насчет вашего приложения). Таким образом, вы можете отслеживать все звонки. Вы также можете включить ведение журнала только в режиме отладки. Надеюсь, этот ответ будет вам полезен.

...