Valgrind mac os как пользоваться

The Valgrind Quick Start Guide

1. Introduction

The Valgrind tool suite provides a number of debugging and profiling tools that help you make your programs faster and more correct. The most popular of these tools is called Memcheck. It can detect many memory-related errors that are common in C and C++ programs and that can lead to crashes and unpredictable behaviour.

The rest of this guide gives the minimum information you need to start detecting memory errors in your program with Memcheck. For full documentation of Memcheck and the other tools, please read the User Manual.

2. Preparing your program

Compile your program with -g to include debugging information so that Memcheck’s error messages include exact line numbers. Using -O0 is also a good idea, if you can tolerate the slowdown. With -O1 line numbers in error messages can be inaccurate, although generally speaking running Memcheck on code compiled at -O1 works fairly well, and the speed improvement compared to running -O0 is quite significant. Use of -O2 and above is not recommended as Memcheck occasionally reports uninitialised-value errors which don’t really exist.

3. Running your program under Memcheck

If you normally run your program like this:

Use this command line:

Memcheck is the default tool. The —leak-check option turns on the detailed memory leak detector.

Your program will run much slower (eg. 20 to 30 times) than normal, and use a lot more memory. Memcheck will issue messages about memory errors and leaks that it detects.

4. Interpreting Memcheck’s output

Here’s an example C program, in a file called a.c, with a memory error and a memory leak.

Most error messages look like the following, which describes problem 1, the heap block overrun:

Things to notice:

There is a lot of information in each error message; read it carefully.

The 19182 is the process ID; it’s usually unimportant.

The first line («Invalid write. «) tells you what kind of error it is. Here, the program wrote to some memory it should not have due to a heap block overrun.

Below the first line is a stack trace telling you where the problem occurred. Stack traces can get quite large, and be confusing, especially if you are using the C++ STL. Reading them from the bottom up can help. If the stack trace is not big enough, use the —num-callers option to make it bigger.

The code addresses (eg. 0x804838F) are usually unimportant, but occasionally crucial for tracking down weirder bugs.

Some error messages have a second component which describes the memory address involved. This one shows that the written memory is just past the end of a block allocated with malloc() on line 5 of example.c.

It’s worth fixing errors in the order they are reported, as later errors can be caused by earlier errors. Failing to do this is a common cause of difficulty with Memcheck.

Memory leak messages look like this:

The stack trace tells you where the leaked memory was allocated. Memcheck cannot tell you why the memory leaked, unfortunately. (Ignore the «vg_replace_malloc.c», that’s an implementation detail.)

There are several kinds of leaks; the two most important categories are:

«definitely lost»: your program is leaking memory — fix it!

«probably lost»: your program is leaking memory, unless you’re doing funny things with pointers (such as moving them to point to the middle of a heap block).

Memcheck also reports uses of uninitialised values, most commonly with the message «Conditional jump or move depends on uninitialised value(s)». It can be difficult to determine the root cause of these errors. Try using the —track-origins=yes to get extra information. This makes Memcheck run slower, but the extra information you get often saves a lot of time figuring out where the uninitialised values are coming from.

Читайте также:  Ноутбук asus x552e драйвера windows

If you don’t understand an error message, please consult Explanation of error messages from Memcheck in the Valgrind User Manual which has examples of all the error messages Memcheck produces.

5. Caveats

Memcheck is not perfect; it occasionally produces false positives, and there are mechanisms for suppressing these (see Suppressing errors in the Valgrind User Manual). However, it is typically right 99% of the time, so you should be wary of ignoring its error messages. After all, you wouldn’t ignore warning messages produced by a compiler, right? The suppression mechanism is also useful if Memcheck is reporting errors in library code that you cannot change. The default suppression set hides a lot of these, but you may come across more.

Memcheck cannot detect every memory error your program has. For example, it can’t detect out-of-range reads or writes to arrays that are allocated statically or on the stack. But it should detect many errors that could crash your program (eg. cause a segmentation fault).

Try to make your program so clean that Memcheck reports no errors. Once you achieve this state, it is much easier to see when changes to the program cause Memcheck to report new errors. Experience from several years of Memcheck use shows that it is possible to make even huge programs run Memcheck-clean. For example, large parts of KDE, OpenOffice.org and Firefox are Memcheck-clean, or very close to it.

6. More information

Please consult the Valgrind FAQ and the Valgrind User Manual, which have much more information. Note that the other tools in the Valgrind distribution can be invoked with the —tool option.

Источник

Как собрать и установить Valgrind на Mac?

Настройка TRX Xmount

Я использую Mac OS X, использую кодовые блоки 10.05

Я загрузил Valgrind и извлек папку. Я совершенно заблудился и не знаю, как это построить.

Я не знаю НИКАКИХ команд терминала / консоли и, как правило, новичок в программировании, поэтому я понятия не имею, как его «собрать» или «скомпилировать». У меня просто есть папка под названием Valgrind с кучей случайных файлов в ней.

Может кто-нибудь сказать мне, как действовать? Я уже проверял веб-сайт / документацию, но на самом деле он не дал мне инструкций по установке, а только инструкции по использованию.

PS: Я знаю, что уже разместил этот вопрос, но предыдущий вопрос был закрыт из-за того, что он был слишком расплывчатым. Я перепостил этот с дополнительной информацией.

PSS: Все, что я в основном спрашиваю, это что мне делать, чтобы установить Valgrind сразу после того, как я загрузил его с веб-сайта и распаковал файлы?

  • @tjm извините, плохо удалите «крик». Я не совсем понимаю, что вы подразумеваете под деталями. Все, что я спрашиваю, это — я загрузил Valgrind, что мне делать дальше? Mankarse Я этого не знал, спасибо за информацию 🙂
  • 1 В официальной документации есть информация о том, как установить Valgrind. ссылка на сайт
  • 2 Посмотрите на README файл в каталоге, который вышел из архива при его извлечении. В этом файле есть инструкции по настройке и сборке, так что попробуйте.
  • 3 При всем уважении, спрашиваю, как собрать и установить valgrind не зная своего пути bash оболочка или умение использовать sudo это все равно, что пытаться программировать, не научившись пользоваться текстовым редактором. Вы пропускаете слишком много шагов.
  • Здесь по теме 4 вопроса, связанных с инструментами, которые используют разработчики, и люди делать часто нужно использовать более новую версию Valgrind, чтобы обойти исправления или получить доступ к новым функциям. Комментарии, связанные с умением работать с командной строкой OP, не совсем конструктивны.

Рекомендуемые:

Использовать brew : brew install valgrind

Ручная установка:

Вот что сработало на моем Mac (10.6). Дважды проверьте, что у вас установлена ​​последняя версия (на данный момент — 3.7.0), затем перейдите в несжатый каталог.

Читайте также:  Образ usb флешки linux

Предлагаю вам поступить так, как написали еще и прочитать ридми.

Начните сборку; /usr/local это место в файловой системе, в которое будет установлена ​​программа. Есть много аргументов вроде prefix которые доступны для настройки установки для вашей конкретной системы, если она не работает по умолчанию. Обычно просто используя ./configure хотя работает отлично.

Или вы могли бы получить его от fink, macports или homebrew.

  • 4 Я не рекомендую использовать ./configure —prefix=/usr/bin для других пользователей. Я сделал это, и тест в README не сработал (в системе не было valgrind на своем пути). Просто используя простой ./configure у меня хорошо сработало.
  • 2 У меня был подобный опыт. с помощью —prefix=/usr/bin сделал valgrind недоступным в системном пути, но оставив это —prefix сделал.
  • @Soonts Нет «правильного префикса», вы можете установить его где угодно.
  • @ joshua.thomas.bird Очевидно, сценарий установки, включенный в valgrind, добавляет bin в конец указанного вами префикса. Если вы укажете —prefix=/usr/bin , он будет установлен в /usr/bin/bin , и поэтому я считаю, что это неправильно.
  • 1 Дорогой Джошуа, по какой-то трагической причине brew не может установить его на мой MacOSX Mojave 10.14.6 , и говорит: valgrind: This formula either does not compile or function as expected on macOS versions newer than High Sierra due to an upstream incompatibility.

Вы можете установить его через brew для Mac:

Возможно, вам придется вручную связать запись с /usr/local/bin поскольку brew отказался это сделать в моем случае:

  • 1 Похоже, вам, возможно, придется установить его с головы, чтобы заставить это работать, как подробно описано здесь
  • Кажется, права доступа к вашему каталогу неверны. Homebrew должен иметь возможность писать в ваш / usr / local без sudo. См. Github.com/Homebrew/legacy-homebrew/issues/19670.
  • Я не знаю, почему использование brew не является общепринятым ответом на вопрос «Как установить X на Mac».
  • Установка @BradParks из HEAD сработала, но на моей машине я получаю configure: error: Valgrind works on Darwin 10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x and 17.x (Mac OS X 10.6/7/8/9/10/11 and macOS 10.12/13) работает версия macOS Mojave 10.14.3
  • Я не пробовал, но этот пост в stackoverflow предлагает решение, @GregDegruy

На MacOS High Sierra

Если у вас появляется следующее сообщение об ошибке:

Исправить

(1) Чтобы правильно установить его, сначала введите следующую команду в Терминале (которая открывает формулы Valgrind)

И измените URL-адрес в разделе заголовка

(2) Сделайте обновление для Homebrew:

(3) Наконец, используйте следующую команду для установки Valgrind из HEAD:

Источники

  • https://www.gungorbudak.com/blog/2018/04/28/how-to-install-valgrind-on-macos-high-sierra/
  • https://github.com/Homebrew/homebrew-core/issues/18998
  • 1 Я могу подтвердить, что это, к сожалению, не работает для OS Catalina (10.15 +)

Основной процесс довольно прост:

Убедитесь, что вы находитесь в правильном каталоге.

когда это будет закончено, запустите:

на этом этапе вам нужно будет su в корень (это относительно сложно сделать, см. примечание в конце). От имени root запустите:

Когда это будет завершено, у вас будет рабочая установка valgrind. Проверьте это, запустив

Чтобы su в корень, вам нужно будет настроить учетную запись root. Если вы не делали этого раньше, см. Инструкции от Apple здесь.

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

где admin — имя пользователя с правами администратора (вам нужно будет ввести пароль для этой учетной записи). Оттуда вы можете запустить su зайти в корень:

Вам нужно будет ввести пароль root, который вы установили ранее.

  • Запуск make дает: «# Это сгенерированный файл, состоящий из следующих правил подавления:»> default.supp echo «#» exp-sgcheck.supp xfree-3.supp xfree-4.supp darwin10-drd.supp darwin10. supp >> default.supp cat exp-sgcheck.supp xfree-3.supp xfree-4.supp darwin10-drd.supp darwin10.supp >> default.supp cat: exp-sgcheck.supp: Нет такого файла или каталога cat: xfree-3.supp: Нет такого файла или каталога cat: xfree-4.supp: Нет такого файла или каталога cat: darwin10-drd.supp: Нет такого файла или каталога cat: darwin10.supp: Нет такого файла или каталога make: *** [default.supp] Ошибка 1 Что я делаю не так?
  • Это ожидаемое поведение (я не могу проверить это прямо сейчас, но я помню, что видел похожие сообщения, когда запускал make ). Бегать make install и посмотрите, работает ли это.
  • make install дает мне еще одну кучу ошибок, когда я тестирую его с помощью valgrind ls -l Он говорит valgrind: команда не найдена
Читайте также:  Оптимизация windows 10 для повышения производительности компьютера

Возможно, вам будет проще использовать что-то вроде macports. Как установить это, вероятно, выходит за рамки этого вопроса, но на их сайте есть посвященная этому страница.

После того, как вы установили macports, вам нужно ввести:

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

  • sudo означает, что остальная часть команды будет работать от имени пользователя root и запросит ваш пароль. Это необходимо для того, чтобы установщик имел правильные разрешения.
  • port это инструмент командной строки для управления macports
  • install это команда для port . Пытаться port help чтобы увидеть список команд.
  • valgrind сообщает macports, что он должен устанавливать
  • +universal это вариант. Это указывает macports настроить valgrind для поддержки 32- и 64-разрядной поддержки.

Источник

Как построить и установить Valgrind на Mac?

Я на Mac OS X, используя codeblocks 10.05

Я загрузил Valgrind и извлек папку. Я совершенно запуталась, и понятия не имею, как его построить.

Я не знаю никаких команд терминала / консоли и, как правило, новичок в программировании, поэтому я понятия не имею, как «построить» или «скомпилировать» его. У меня просто есть папка под названием Valgrind с кучей случайных файлов в нем.

может кто-нибудь сказать мне, как действовать? Я уже проверил веб-сайт / документация, но на самом деле это не дало мне инструкции по установке, просто инструкции по использованию.

PS: Я знаю, что я уже разместил этот вопрос, но предыдущий вопрос был закрыт, за слишком расплывчатый. Я перепостил это с дополнительной информацией.

PSS: все, что я в основном спрашиваю, что мне делать, чтобы установить Valgrind сразу после загрузки с веб-сайта и извлечь файлы?

4 ответов

рекомендуется:

использовать brew : brew install valgrind

Инструкция По Установке:

вот что работало на моем mac (10.6). Дважды проверьте, что у вас есть последняя версия (прямо сейчас, 3.7.0), затем перейдите в несжатый каталог

Я предлагаю вам сделать, как другой опубликованный и прочитать readme.

начать строить; /usr/local — это место в файловой системе, в которое будет установлена программа. Есть много аргументов как prefix которые доступны для настройки установки в вашей конкретной системе, если она не работает по умолчанию. Обычно просто используя ./configure работает отлично, хотя.

или вы, вероятно, могли бы получить его от fink или macports или homebrew.

вы можете установить его через brew для Mac:

возможно, вам придется вручную связать запись с /usr/local/bin так как Брю отказался это делать в моем случае:

основной процесс довольно прост:

убедитесь, что вы находитесь в правильном каталоге.

когда это закончится, запустите:

в этот момент вам нужно будет su в корень (это довольно сложно сделать, см. Примечание В конце). Как root, запустите:

когда это будет закончено, у вас будет рабочая установка valgrind. Тест бег!—12—>

до su в root вам нужно будет настроить учетную запись root. Если вы не делали этого в прошлом, см. инструкции от apple здесь.

для выполнения su , сначала вам нужно будет запустить учетную запись с правами администратора. Если это еще не сделано, можно переключить пользователей следующим образом:

здесь admin имя пользователя с правами администратора привилегии (нужно будет ввести пароль для этой учетной записи). Оттуда вы можете запустить su чтобы войти в root:

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

Вам может быть проще использовать что-то вроде системы MacPorts. Как установить, что, вероятно, выходит за рамки этого вопроса, но у них есть страница посвященный ему на своем сайте.

после установки macports необходимо ввести:

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

  • sudo значит остальные команда будет работать как root, и будет запрашивать ваш пароль. Это необходимо для установки, чтобы иметь правильные разрешения
  • port является инструментом командной строки для управления macports
  • install — это команда для port . Попробуй!—5—> для просмотра списка команд.
  • valgrind сообщает macports, что он должен устанавливать
  • +universal — это вариант. Это говорит macports настроить valgrind для поддержки 32 бит и 64 бит поддержка.

Источник

Оцените статью