Wednesday, 28 September 2011

Dependency Walker

The description from official page:

"Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. ...

Dependency Walker is also very useful for troubleshooting system errors related to loading and executing modules. Dependency Walker detects many common application problems such as missing modules, invalid modules, import/export mismatches, circular dependency errors, mismatched machine types of modules, and module initialization failures."

Wednesday, 21 September 2011

C2813

Побороть C2813 из-за /MP4 можно дополнительно указав параметр /MP1 в свойствах файла в котором возникает ошибка компиляции.

Thursday, 5 June 2008

VS tricks: C++ include directories from file

Небольшой трюк для быстрого переноса общих настроек с одного проекта в другой в случае с MS Visual Studio. Опробовано было на 2005й студии, но должно работать и на других.

В данном случае, будут переноситься include directories, но наверное так можно переносить и другие настройки..

1. Создаем, собственно, файл с настройками и сохраняем его в папке с solution-ом. В случае include directories в себе он должен содержать, например, следующее:

/I..\Include
/I..\CoeffTables
/I..\Views

2. Открываем свойства проекта. Идем следующим путем:
Configuration Properties -> C/C++ -> Command Line -> Additional options:

3. Вписываем туда путь к файлу в виде:
@filepath/filename.

4. Несколько файлов разделяются пробелами:
@file1path/file1name @file2path/file2name.

Плюсы:
  • быстрая конфигурация проектов;
  • файл с настройками можно генерить автоматически;
Минусы:
  • в случае с include directories, нельзя перейти к файлу из IDE.
Вывод: Решение можно использовать для небольших проектов, состоящих из большого количества модулей. Например, для разработки плагинов.

Thursday, 3 April 2008

inline особенности отладки с GDB

При отладке с GDB в пошаговом режиме, в некоторых как оказалось определенных случаях, команда step вместо ожидаемого перехода в функцию (даже из текущего модуля), подобно ивану сусанину, заводит в непроходимые дебри исходников STL.

В процессе продолжительного гуглования причина выяснилась, STL оказался ни при чем. Описанное же поведение проявляется на inline функциях (напр., при выводе в тот же cout).

В качестве очевидного решения напрашивается собирать дебажную версию проекта без встраивания inline функций, т.е. игнорируя ключевое слово inline. С GCC, используя флажок -fno-inline, это сделать совершенно несложно. Решение кривоватое, имхо, но дебажиться становится несколько проще.

linkdump по результатам инвестигейшна.

Из архива переписки gcc@gcc.gnu.org:
The bug is partly Gdb, partly the stabs debug format, and partly the emitted debugging information.
Полностью можно ознакомиться тут.

Аналогичный bug-report в mail-list архиве gdb@sources.redhat.com.

История по отлавливании бряк в конструкторах. Большинство записей в блоге, кстати, про отладку и GDB.

Параметры для GCC: на русском, на onlamp.com :)

Friday, 29 February 2008

how to add C++ header's directory in Eclipse

определение переменной окружения

Project properties -> C/C++ Build -> Environment

добавляем новую переменную BOOST со значением D:\libs\boost_1_34_1.
почему-то со значением D:\libs\boost_1_34_1\ (разница в слеше на конце) хедеры не находились.

добавление в проект пути к хедерам

Project properties -> C/C++ Build -> Settings -> GCC C++ Compiler -> Directories

добавляем новое значение: ${BOOST}

Wednesday, 20 February 2008

первые функции на баше

определение функций

фунцию на баше можно определить так:
function function_name {
#commands..
}
можно так:
function_name () {
#commands..
}
в принципе, у меня получилось и так:
function function_name () {
#commands..
}
здесь рекомендуют использовать способ номер два в силу его большей переносимости.
кстати, неплохая дока по башу с большим количеством примеров :)

возвращение значений из функций

здесь сюрпрайз. в баше есть встроеная команда return, используя которую можно завершить выполнение функции в необходимый момент. почти как в C++. отличие в том, что return ничего НЕ возвращает :) return всего лишь записывает код завершения функции в глобальную переменную $?

результат выполнения из функции можно вернуть через:
  1. глобальные переменные;
  2. команду вывода в стандартный поток echo;
способ номер 1 вроде понятен. остается только угадывать в какой именно переменной результат.. можно принять некоторое соглашение именования переменных и для хранения результата использовать переменные FUNCT_NAME_RES1, FUNCT_NAME_RES2 и т.д.; или просто в масиве FUNCT_NAME_RES.

способ номер 2 является более элегантным, согласно упоминаемой доке :) так результат выполнения функции в данном случае, цитирую, cнимается со стандартного вывода конструкцией подстановки команд. что это означает проще показать на примере:
foo () {
echo "12"
return 0
}

value1=`foo`
чему равно value1? правильно -- 12. это и есть более элегантное решение. прощай, трейс-лог. превед, трейс-лог :)

косвенные ссылки на переменные

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

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

Tuesday, 12 February 2008

.NET command-line компилятор

чтобы собрать небольшой проект на C# бывает достаточно командной строки. для чего достаточно наличие установленного фреймворка, без которого собственно .NET-приложение и не запустишь.

C# компилятор для командной строки можно найти в директории:
%windir%\Microsoft.NET\Framework\

далее сохраняем текст программы в файл, например, с названием cool_appl.cs и компилим:
csc cool_appl.cs
запускаем приложение
cool_appl

больше параметров для запуска компилятора можно посмотреть в МСДНе. идея подсмотрена здесь.

Monday, 11 February 2008

памятка начинающим башерам: пробелы как часть синтакса

объявление переменных

при инициализации переменной (это когда ей присваивается значение) знак равно нельзя выделять пробелами, т.е.
val1=12 #правильно

val1 = 12 #неправильно
val1= 12 #неправильно
val1 =12 #неправильно

об этом могут сообщать следующие ошибки:
  • val1: command not found
  • 12: command not found

условные переходы

при написании на баше условных переходов (это там где if), условие (оно же предикат) должно заключаться в скобки. и скобки эти обязательно должны быть окружены пробелами. т.е.:
if [ $1 -gt 0 ]; then #правильно

if[$1 -gt 0]; then #неправильно

отсутсвие пробелов сигнализируется ошибками типа:
  • syntax error near unexpected token `then'
  • [0: command not found

Wednesday, 14 November 2007

df: свободное место на винте

как узнать количество свободного места на винте под UNIX?

если коротко, то утилитой df

если подробно, то man df