Очевидная вещь, которую нужно сделать, это просто поместить сообщение об ошибке в foo
. Если вы не можете этого сделать, просто оберните это:
bool fooWithLogging(int x, iny y)
{
auto result = foo(x,y);
if (result)
{
std::cerr << "Error occurred with values" << x << "," << y << std::endl;
}
}
Вызов обертки в вашем коде:
void func1()
{
...
fooWithLogging(x,y);
...
}
void func2()
{
...
fooWithLogging(x,y);
...
}
Бонус: сделайте запись динамической:
[ 112]А теперь с вашим требованием FILE и LINE, которое только что упоминалось в комментариях:
bool _fooWithLogging(int x, iny y, const std::string& filename, int line)
{
auto result = foo(x,y);
if (result && g_isFooLoggingEnabled)
{
std::cerr << "Error occurred in file" << filename << " on line " << line << " with values" << x << "," << y << std::endl;
}
}
#define FooWithLogging(x, y) _fooWithLogging(x, y, __FILE__, __LINE__)
Затем в коде:
void func1()
{
...
FooWithLogging(x,y);
...
}
На первый взгляд не кажется возможным снова использовать внешнюю различную сессию инструмента.
git-mergetool
документация ясно состояния:
, Если пользовательский инструмент слияния правильно указывает на успех разрешения слияния с его кодом выхода , то переменная конфигурации
mergetool.<tool>.trustExitCode
может иметь значение true.
Иначе,git-mergetool
предложит пользователю указывать на успех разрешения после того, как инструмент пользователя выйдет.
, Таким образом, код выхода (или проверка пользователя после выхода различного инструмента ) необходим, подразумевая, что пользователь сначала закрывает внешний различный инструмент.
, Который кажется большим стимулом сократить количество конфликтов на каждом слиянии/переоснове, которого каждый делает попытку;) (безотносительно используемого инструмента VCScs)
Примечание:
Два других мерзавца внешние различные настройки инструментов (" Установка разности и инструментов слияния для Мерзавца в Windows " и" Установка SourceGear DiffMerge с Мерзавцем ") не дают больше надежд, когда это доходит до [1 111] не закрытие внешний различный инструмент...
Если Ваш mergetool поддержек выбора вводные файлы в существующем экземпляре, можно определить команду в конфигурации мерзавца:
% git config mergetool.whatever_you_want.cmd 'exec /path/to/merge/tool $LOCAL $MERGED $REMOTE'
% git config merge.tool whatever_you_want
git mergetool
тогда выполнит Вашу пользовательскую команду и затем предложит Вам относительно того, был ли файл объединен успешно (вместо рассмотрения кода выхода).
пример я просто взломал вместе для vimdiff:
% git config mergetool.persistent.cmd 'gvim --remote-tab-silent "+set buftype=nowrite" "$PWD/$BASE" && sleep 1; gvim --remote-send ":split $PWD/$REMOTE<CR>:set buftype=nowrite<CR>:vertical diffsplit $PWD/$MERGED<CR>:vertical diffsplit $PWD/$LOCAL<CR>:set buftype=nowrite<CR><C-W>l"'
Это работает достаточно хорошо, я могу начать использовать его сам!
Проблема для mergetool состоит в том, что он сознательно использует интерфейс командной строки для инициирования сессии слияния и затем ожидает вызванной команды для возврата для определения, когда пользователь управляемое слияние завершился.
Большинство инструментов слияния не обеспечивает механизм командной строки для запуска сессии слияния в уже рабочем процессе с путем к определению, когда разрешение было завершено и или успешное или нет.
возможно, что некоторые инструменты слияния могли обеспечить эту функциональность посредством отдельной команды обертки и своего рода IPC, но это будет чрезвычайно инструмент, конкретный и трудный реализовать в универсальной mergetool программе.