Как использовать mtrace для сервера

Я успешно использовал mtrace() в моей программе, но он создал только нечитаемый файл размером 16 МБ, я прочитал Вот что для создания читаемого файла я должен использовать:

 mtrace ./myexe log

проблема в том, что у меня есть сервер, который требует некоторых аргументов, и я должен запустить приложение на нем, я попытался запустить это:

 mtrace "./Server args" log

но вместо этого, если открыть сервер и ждать приложения, оно просто выводит список неосвобожденной памяти.

Итак, мой вопрос, как я могу использовать mtrace для серверов правильно?

РЕДАКТИРОВАТЬ:

Запуск mtrace с нечитаемым файлом дает мне это:

 mtrace "./Server args" log

много строк вроде этого:

- 0x0000000003941d40 Free 224404 was never alloc'd 0x2384d8b

и это:

Memory not freed:
-----------------
Address     Size     Caller
0x00000000039600f0     0x48  at 0x238766c
0x00000000039739e0     0x38  at 0x37f0c0cbad
0x00007fc398000960     0x75  at 0x7fc3f3f0b2fd
0x00007fc3980009e0     0x30  at 0x7fc3f3f0b2fd
0x00007fc3c0001240     0x26  at 0x7fc3f3f0b2fd
0x00007fc3c00012a0     0x27  at 0x7fc3f3f0b2fd
0x00007fc3c0001ee0     0x29  at 0x7fc3f3f0b2fd
0x00007fc3c0001f20     0x2a  at 0x7fc3f3f0b2fd
0x00007fc3c0001f90     0x2a  at 0x7fc3f3f0b2fd
0x00007fc3c0001fd0     0x22  at 0x7fc3f3f0b2fd
0x00007fc3c0002030     0x2a  at 0x7fc3f3f0b2fd
0x00007fc3c00026c0     0x29  at 0x7fc3f3f0b2fd
0x00007fc3c0002700     0x22  at 0x7fc3f3f0b2fd
0x00007fc3c0002730     0x29  at 0x7fc3f3f0b2fd
0x00007fc3c00032d0     0x26  at 0x7fc3f3f0b2fd
0x00007fc3c00034d0     0x27  at 0x7fc3f3f0b2fd
0x00007fc3c00035b0     0x22  at 0x7fc3f3f0b2fd
0x00007fc3c00035e0     0x29  at 0x7fc3f3f0b2fd
0x00007fc3c00082b0      0x9  at 0x37f1081182
0x00007fc3c00084b0     0x28  at 0x7fc3f3f0b2fd
0x00007fc3c000a2f0      0xb  at 0x37f1081182
0x00007fc3c000a650     0x26  at 0x7fc3f3f0b2fd
0x00007fc3c000ac10     0x1e  at 0x7fc3f3f0b2fd
0x00007fc3c000af90      0xc  at 0x37f1081182
0x00007fc3c000b360     0x29  at 0x7fc3f3f0b2fd
0x00007fc3c000b870     0x38  at 0x7fc3f3f0b2fd
0x00007fc3c000ede0      0xc  at 0x37f1081182
0x00007fc3c00118a0     0x22  at 0x7fc3f3f0b2fd
0x00007fc3c0011f30     0x2c  at 0x7fc3f3f0b2fd
0x00007fc3c0011fd0     0x1e  at 0x7fc3f3f0b2fd
0x00007fc3c0012040     0x2a  at 0x7fc3f3f0b2fd
0x00007fc3c0012c30     0x40  at 0x7fc3f3f0b2fd
0x00007fc3c0014700      0xb  at 0x37f1081182
0x00007fc3c0014f10      0xb  at 0x37f1081182
0x00007fc3c0014fa0      0xb  at 0x37f1081182
0x00007fc3c00151d0     0x88  at 0x7fc3f7cc05c9
0x00007fc3c001d4b0     0x88  at 0x7fc3f7cc05c9
0x00007fc3c0024a00      0xb  at 0x37f1081182
0x00007fc3c003e960     0x40  at 0x7fc3f3f0b2fd
0x00007fc3c003edb0     0x88  at 0x7fc3f3f0b2fd
0x00007fc3c003ee40    0x170  at 0x37f0c118a3
0x00007fc3c003efc0     0x88  at 0x7fc3f3f0b2fd
0x00007fc3c003f050    0x170  at 0x37f0c118a3
0x00007fc3c003f1d0     0x88  at 0x7fc3f3f0b2fd
0x00007fc3c003f260    0x170  at 0x37f0c118a3
0x00007fc3c003f3e0     0x88  at 0x7fc3f3f0b2fd
0x00007fc3c003f470    0x170  at 0x37f0c118a3
0x00007fc3c003f5f0     0x88  at 0x7fc3f3f0b2fd
0x00007fc3c003f680    0x170  at 0x37f0c118a3
0x00007fc3c003f800     0x88  at 0x7fc3f3f0b2fd
0x00007fc3c003f890    0x170  at 0x37f0c118a3
0x00007fc3c0040890        0  at 0x7fc3efa7ee9d
0x00007fc3c00408b0      0x8  at 0x7fc3efa7ee9d
0x00007fc3c0040fc0    0x3f0  at 0x7fc3f3f0b2fd

1

Решение

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

Так чтобы Создайте лог-файл, в который вы сначала поместили соответствующие звонки mtrace() (функция c) и т. д. в ваш код и перекомпилируйте с включенной отладкой. Далее вы просто запускаете программу как обычно:

./Server args

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

Тогда к читать лог-файл, который вы запускаете

mtrace Server <logfilename>

edit: Для общей отладки проблем с памятью я бы рекомендовал вместо этого взглянуть на valgrind (если, конечно, вы уже знаете о valgrind и не имеете веских причин не использовать его в этом случае).

0

Другие решения


По вопросам рекламы [email protected]