LINUX.ORG.RU

Модуль для слежения за аллоцируемой памятью

 , , ,


3

5

Старый лоровский акк потерял (Edible), запилил этот.

Короче. Модуль для слежения за аллоцируемой памятью. Можно подключить в коде (прописать один инклуд для си-проекта), можно использовать уже для скомпилированного проекта (на любом языке). Инструкции в ридми. Выхлопывает так:

[C-TH][        07_all_coloured.c:0009] Malloc :              0x00000190 B (0x09A9C008) : Success
[C-TH][        07_all_coloured.c:0013] Realloc: (0x09A9C008) 0x00000320 B (0x09A9C028) : Success
[C-TH][        07_all_coloured.c:0017] Free   : (0x09A9C028)                           : Success
[C-TH][        07_all_coloured.c:0019] Calloc :              0x00000080 B (0x09A9C008) : Success
[C-TH][        07_all_coloured.c:0022] Free   : (0x09A9C008)                           : Success

Может стрелять в stdout/stderr/файл. Может убрать необходимость проверять на null, может красить выхлоп с помощью ANSI-кодов.

https://github.com/codemeow/c-heetah

Берите, кому надо.

★★★★★

Интересная штука.
Вопрос:
Будет видно в с++ когда идет реалокация памяти для std::vector?

ymuv ★★★★
()
Ответ на: комментарий от ymuv

Если там под капотом malloc и его банда - то да, только имя файла и строчку будет показывать системную. Еще можно чере вариант «библиотека» смотреть, аналогично, будет видно, если там под капотом malloc.

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Для него надо сорцы модифицировать, а тут можно работать и без модификации. Плюс mtrace нужно в начале майна прописывать, а в либах его нет. Плюс мой модуль можно только на один сишник прописать, чтобы отладить только конкретный файл.

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Ну и плюс модуль еще пару фишечек умеет типа избавления от необходимости чекать аллоки а нуль.

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от PPP328

Для него надо сорцы модифицировать, а тут можно работать и без модификации.

Инклюдить всё равно придётся.

Плюс mtrace нужно в начале майна прописывать, а в либах его нет.

Есть трюк с LD_PRELOAD: http://stackoverflow.com/questions/2593284/enable-mtrace-malloc-trace-for-bin...

Хотя вижу отличие: в выхлопе mtrace не будет имён файлов. Но всё равно такие трассировщики без готовых утилит обрабоки сырого выхлопа годятся только для отладки примитивных программ.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

У меня выхлоп выравнен (сигнатура-имя файла-строка-действие-первичный указатель-размер-вторичный указатель-результат), так что утилиту обработки можно хоть на баше нарисовать с выхлопом svg-графиками (збыл как эта утилита называется)

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Вопрос - какой вы видите утилиту обработки? Если графической - то примерный интерфейс. Тут у меня отслеживается каждая реаллок цепочка, в случае чего можно и таймштамп впихнуть чуть модифицировав

PPP328 ★★★★★
() автор топика
Ответ на: комментарий от PPP328

Не, мне не надо. Был момент, когда мне очень нужно было отслеживать аллокации именно в библиотеке. Я пробовал разные способы, включая и mcheck. Но в итоге остановился на memcheck из Valgrind'а. Несмотря на замедление в 20 раз, это лучше, чем простыни от трейсера.

Если программа отдельная, замечательно работает AddressSanitizer.

i-rinat ★★★★★
()
Ответ на: комментарий от PPP328

Это всё равно убого, нормально пишут лог с нужной детализаций без всякого форматирования, может быть даже бинарный лог. Потом его обрабатывают как хочется. И такие инструменты уже даже есть вида valgrind --tool=massif

mashina ★★★★★
()

Ты чего, там же макросы :-) Надо было шаблонами делать на цепепе :-)

anonymous
()
Ответ на: комментарий от PPP328

ты притащил нулевое говно и кукарекаешь? сдрисни

anonymous
()

Берите, кому надо

Это ключевые слова, не понимаю чего они на тебя накинулись. Кому надо - может быть полезным. Хотя есть Valgrind и куча других более серьезных средств. Ставлю звездочку теме.

I-Love-Microsoft ★★★★★
()

Boehm GC — наше всио!

anonymous
()
Ответ на: комментарий от i-rinat

Для него надо сорцы модифицировать, а тут можно работать и без модификации.

Инклюдить всё равно придётся.

Пятизвёздочный ламер, прочитайте про опцию -include у gcc.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, анонимус! Ща потестирую и добавлю в мануал если сработает

PPP328 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.