время ожидания соединения при запуске программы в valgrind - PullRequest
1 голос
/ 20 августа 2011

У меня есть программа, которая использует библиотеку gloox для подключения к серверу xmpp.Соединение всегда успешно, если я запускаю программу напрямую.Тем не менее, программа имеет высокую загрузку процессора.Поэтому я обратился к Вальгринду за помощью.Но если я запускаю программу с помощью valgrind (--tool = callgrind), соединение всегда прерывается.Я должен признать, что я новичок в Вальгринде, но почему это происходит?

Ответы [ 3 ]

0 голосов
/ 24 декабря 2011

Если ваша первоначальная проблема - высокая загрузка процессора с gloox, я почти уверен, что ваша программа каждые 10 миллисекунд опрашивает новые сообщения xmpp. Запустите вашу программу с recv(-1) вместо recv(10), например.

http://camaya.net/glooxlist/dev/msg01191.html

0 голосов
/ 30 декабря 2011

После того, как я столкнулся с подобной проблемой и дополнительной отладкой, она сводится к проблеме при разборе раздела xmpp xml. В нашем случае проблема была в синтаксическом анализаторе xpath, который использует функцию util.h int2string, которая использует long2string.

При нормальном исполнении

int len = (int)( log( (double)( 10 ) ) / log( (double) 10 ) ) + 1; 

дает 2, но дает 1 под валгриндом и ломает все.

Мы заменили функцию

static inline const std::string int2string( int value )
    {
      return long2string( value );
    }

от

#include <sstream>
static inline const std::string int2string( int value )
    {
      /* ADDON*/
      //when we call long2string, it does weird cmath log stuff and with computer precision,
      //the result may be different from an environnement to another. eg: when using valgrind
      std::ostringstream s;
      s << value;
      return s.str();
      /* ADDON */
      //return long2string( value );
    }
0 голосов
/ 21 августа 2011

Valgrind выполняет ряд преобразований исполняемого кода, заставляя его работать в 10-50 раз медленнее, чем изначально.Так что вполне вероятно, что время соединения истекло.Вы можете запустить Valgrind с профилированной программой в strace , чтобы найти это соединение по кодам ошибок.

...