Я успешно использовал 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
Я думаю, что вы неправильно понимаете использование команды mtrace. На основе этот кажется, что mtrace просто превращает лог-файл во что-то удобочитаемое человеком. Для создания лог-файла в первую очередь необходимо запустить приложение.
Так чтобы Создайте лог-файл, в который вы сначала поместили соответствующие звонки mtrace()
(функция c) и т. д. в ваш код и перекомпилируйте с включенной отладкой. Далее вы просто запускаете программу как обычно:
./Server args
который будет записывать любые проблемы с памятью в файл журнала, имя которого задается MALLOC_TRACE
переменная окружения.
Тогда к читать лог-файл, который вы запускаете
mtrace Server <logfilename>
edit: Для общей отладки проблем с памятью я бы рекомендовал вместо этого взглянуть на valgrind (если, конечно, вы уже знаете о valgrind и не имеете веских причин не использовать его в этом случае).