The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

C/C++, сборка, отладка

   Корень / Программисту и web-разработчику / C/C++, сборка, отладка

----* Использование LTTng для прозрачной трассировки приложений в Ubuntu Linux (доп. ссылка 1)   [комментарии]
  Система трассировки LTTng (http://lttng.org/) работает на уровне Linux-ядра и отличается минимальным влиянием на работу профилируемого приложения, что позволяет приблизить условия работы данного приложения к его выполнению без использования трассировки (например, позволяет выявлять проблемы с производительностью в программах, работающих в реальном режиме времени).
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Запись бинарных данных в секцию ELF   Автор: 赤熊  [комментарии]
  Стоит задача - в программе запрятать бинарные данные. Допустим архив.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Оценка стоимости сборки Android 5 (x86-64) на облачных серверах Amazon EC2 (доп. ссылка 1)   Автор: Abylay Ospan  [комментарии]
 
Краткая сводка по результатам тестирования: 
   сервер 4 CPU, 16GB RAM, время сборки: 04:35:30 стоимость: $1.15 
   сервер 16 CPU, 64GB RAM, время сборки: 01:12:02 стоимость: $1.21
   сервер 40 CPU, 160GB RAM, время сборки: 00:32:15 стоимость: $1.34

По результам видно, что разница в цене всего 15%, но при этом время сборки
уменьшается в 8-9 раз. Сборка проводилась в разное количество потоков (make -j X).

Лучший результат показал вариант 'количество CPU * 2'. Исходные тексты Android
были взяты из репозитория на http://www.android-x86.org/
Сборка проводилась командами: 

   . build/envsetup.sh && lunch android_x86_64-eng && make -j X 

ОС: Ubuntu 14.04.2 LTS, kernel 3.13.0-48-generic x86_64 CPU: Intel(R) Xeon(R)
CPU E5-2676 v3 @ 2.40GHz HDD: SSD 160GB
 
----* Как собрать в новом GCC старую C++-программу, использующую iostream.h   [комментарии]
 
В блоках #include следует заменить iostream.h и fstream.h на iostream и fstream
(убрать ".h"). В начало файлов нужно добавить "using namespace std;", а при
сборке в Makefile указать флаг "-fpermissive".
 
----* Внедрение точек останова gdb в исходный код (доп. ссылка 1)   Автор: glebiao  [комментарии]
  На github [[https://github.com/kmcallister/embedded-breakpoints опубликован]] способ внедрения в исходный код точек останова для gdb, не влияющий на нормальное выполнение программы в отсутствие отладчика. Способ основан на размещении адреса локальной переменной в секции (embed-breakpoints линкера).
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Создание модуля для iptables, изменяющего ID пакета (доп. ссылка 1)   Автор: xlise  [комментарии]
  Данная статья основывается на материале "Разработка Match-модуля для iptables своими руками" (http://www.linuxjournal.com/article/7184), но код работает на ядрах 2.6.20+.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как в программе на Си узнать от какого пользователя запущен активный экран   Автор: pavlinux  [комментарии]
  #include #include #include // strcmp #include
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как указать GCC выводить предупреждения для бессмысленных сравнений (доп. ссылка 1)   Автор: Kir Kolyshkin  [комментарии]
  При сборке ниже представленного некорректного кода, gcc не выдает никаких предупреждений даже с -Wall, при этом указатель он приводит к unsigned, поэтому результат сравнения всегда ложен.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Изменение номера inode файла в Linux   Автор: Victor Leschuk  [комментарии]
  Для некоторых специфических целей может понадобиться изменить номер inode у существующего файла, либо создать файл с заранее заданным номером. Штатными средствами сделать это - задача нетривиальная, однако с помощью модуля ядра это несложно.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как отлаживать сетевые скрипты с помощью netcat (доп. ссылка 1)   Автор: Вячеслав  [комментарии]
 
   mkdir tmp
   cd tmp
   mkfifo sock1 sock2
   nc -l -p 8000 < sock1 | tee sock2 &
   nc 10.245.134.32 23 < sock2 | tee sock1

Теперь вместо того, чтобы устанавливать соединение непосредственно с узлом 10.245.134.32:23, 
делаем telnet на localhost:8000 из другой консоли на хосте home и наблюдаем
проходящие данные внутри
tcp-сессии в консоли, где выполняли команды.

Для этой же цели подходит и утилита socat: 
   socat -v tcp4-l:8000 tcp4:yandex.ru:80
 
----* Отладка php скриптов на стороне сервера   Автор: Pavel Piatruk  [комментарии]
  Иногда пользовательские скрипты или зависают, или хотят соединиться с чем-то запрещенным в файрволе, или интерпретатор неожиданно вылетает, не передав заголовок Content-type, что приводит к ошибке 500. Для того, чтобы разобраться в причине, попробуем отладить скрипты со стороны сервера, не залезая в код php. Сначала придется изменить конфигурацию apache, чтобы php работало через suphp, а не через модуль mod_php5. Я не буду рассказывать, как это делается. Главное, кроме обычного,
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Ускорение компиляции в Gentoo (доп. ссылка 1)   Автор: wildarcher7  [комментарии]
  В наличии два ПК, на которых установлен Gentoo Linux с одинаковой версией gcc (4.3.1). Так как компиляция из исходников в Gentoo необходима и компиляция отнимает некоторое время, хотелось бы сократить время сборки. На помощь приходит distcc и ccache.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* VMWare Workstation 6 для отладки ядра Linux (доп. ссылка 1)   Автор: Тарасенко Николай  [комментарии]
  Недавно была добавлена интересная особенность в Workstation 6.0, которая делает WS6 отличным средством для отладки ядра Linux. Теперь можно с легкостью отлаживать Linux VM на хосте при помощи gdb без каких-либо изменений в Guest VM. Ни каких kdb, перекомпиляций или еще одной машины не требуется. Все что вам потребуется, так это всего одна строчка в VM'шном конфигурационном файле.
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как посмотреть причину генерации core файла в gdb (доп. ссылка 1)   [комментарии]
  программа - файл рухнувшей программы, собранной с включением отладочной информации core - файл с core
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как избавиться от линковки GNOME приложения с лишними библиотеками (доп. ссылка 1)   [комментарии]
 
Собираем по умолчанию:
    readelf -d /usr/local/bin/gnome-terminal |grep NEEDED | wc -l
    52 - требуется 52 библиотеки.

Устанавливаем флаг --as-needed:
    export CFLAGS = "-Os -s -Wl,--as-needed"

После пересборки, требуется 21 реально необходимая для работы библиотека.
 
----* Обобщение используемых моделей ввода/вывода (доп. ссылка 1)   [обсудить]
 
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как посмотреть какие файлы пытается открыть или выполнить программа   [комментарии]
 
strace -f -o strace.txt -e execve программа
strace -f -o strace.txt -e open,ioctl программа
 
----* Как посмотреть какие функции системных библиотек используются в программе   [комментарии]
 
nm "объектный или запускной файл"
Для работы nm нужна таблица символов, т.е. нельзя использовать после утилиты
strip или ключа "-s" в gcc.
 
----* Как пропатчить приложение запускаемое через inetd для определения IP клиента.   Автор: uldus  [обсудить]
 
Си:
   struct sockaddr_in addr_name;
   socklen_t addr_len;
   addr_len = sizeof(addr_name);
   bzero(&addr_name, sizeof(addr_name));
   if (getpeername(0, (struct sockaddr *)&addr_name, &addr_len) >= 0){                          
     // выводим адрес в printf через inet_ntoa(addr_name.sin_addr)
   } 

Perl:
   use Socket;
   my $std_sockaddr = getpeername(STDIN);
   my $cur_ipaddr = "0.0.0.0";
   if (defined $std_sockaddr){
      my ($tmp_port, $tmp_iaddr) = sockaddr_in($std_sockaddr);
      $cur_ipaddr = inet_ntoa($tmp_iaddr);
   }
 
----* Какие параметры указать GCC для оптимизации. (доп. ссылка 1)   [комментарии]
 
-O6 - полная оптимизация (по умолчанию часто стоит -O2).
-fomit-frame-pointer -использовать стек для доступа к переменным.
-march=i686 -mcpu=i686 -DARCH=k6 -DCPU=k6 - оптимизация под CPU (586, 686,k5,k6,k7,athlon,pentiumpro).
-ffast-math -funroll-loops
 
----* Как узнать какие динамические библиотеки прилинкованы к программе   [комментарии]
 
ldd файл
 

 Версия для печати




  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor