- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
#define __DEBUG
#ifdef __DEBUG
#define print_pair(p) do{std::cout << "(" << ((p).first + 1) << ", "\
<< ((p).second + 1) << ")" << std::endl;}while(0);
#endif
Graph::result
Graph::dijkstra (int start)
{
#ifdef __DEBUG
std::cout << "Dijkstra algorithm tracing:" << std::endl;
#endif
distances[start] = 0;
std::set<std::pair<int, int>> q;
q.insert (std::make_pair(distances[start], start));
while (!q.empty())
{
#ifdef __DEBUG
std::cout << "top element of a set: ";
print_pair(*q.begin());
#endif
int current = q.begin()->second;
q.erase(q.begin());
for (int i = 0; i < adj[current].size(); ++i)
{
#ifdef __DEBUG
std::cout << "current vertex: " << (current + 1);
std::cout << " ad current state of distances array is: " << std::endl;
for (auto i: distances)
std::cout << i << " ";
std::cout << std::endl;
#endif
int to = adj[current][i].second;
int length = adj[current][i].first;
// Relaxations
if (distances[to] > distances[current] + length)
{
#ifdef __DEBUG
std::cout << "relaxation for edge (" << current << ", " << to << ") ";
std::cout << "with weight " << length << std::endl;
#endif
q.erase(std::make_pair(distances[to], to));
distances[to] = distances[current] + length;
path[to] = current;
q.insert(std::make_pair(distances[to], to));
}
}
}
// Replace INF by -1
std::replace (distances.begin(), distances.end(), INF, -1);
return distances;
}
Я у мамы решил подебажить как мыщъх дебажил при помощи отладочной печати. Вот что получилось.
Ну кроме того, что лучше какой-нибудь макрос замутить и управлять им в одной точке, а не ебашить #ifdef на каждую строку... Что-нибудь типа: Ну и std::cerr всё-таки, чтобы выхлоп не портить.
Ну и вместо #define print_pair(p) шаблончик бы. Няшно и полезно даже не в дебажном коде...
all_humane_is_shit
all_humans_are_shit
Ты хотел сказать countable / uncountable?
all news is bad? all oil is lost?
да. (count vs noncount nouns.)
И в мальчишке, и в девчонке
Есть по триста грамм какашек
Или даже полкило.
А в огромных дядях, тётях
Их, конечно же, побольше.
Иногда и так бывает:
Целый человек — говно.
но вообще оригинальная песенка (из мультика про обезъян) на фоне исламизма приобрела особый смысл
мм
В рантайме нужно уметь включать всё это.
Так?
А debug_level задаётся через .kokoko.rc или argv.
А для годного дебуга так:
Точка с запятой в конце нинужна.
З.Ы. В крестах и так граблей полно, зачем ещё свои приносить и раскладывать?
Не забыть ещё трейсить парсер этого конфига.
кто-то реально пользуется?
я думал все только пиздят пафосно, а на самом деле всё срется в один файл log.txt, в котором потом админы и программеры ищут что им нужно в куче мусора и говна, разве нет?
Зачем так грустно, есть же syslog с роутингом по тэгам.
в сислог есть северити и фасилити
разве нет?
или ты фасилити тегом назвал?
разве нет?
Это зависит от реализации. Стандарт много чего описывает, вплоть до возможности передавать произвольные структурированные метаданные.
Мы используем syslog-ng, он умеет фильтрацию по APP-NAME, который содержится в сообщении Похожие фичи есть в rsyslog.
Плюс если записи сливаются в хитрый буфер, а не в log.txt, то сам царь носа не подточит.
Обвязки много писать пад сибя, не всегда оно того стоит.
Кмк, в условиях ограниченных временных ресурсов проще писать в лог только внятные полезные сообщения, которые потом помогут понять контекст и осознать причины, чем городить динамическую опердень, чтобы потом разгребать в логах произвольные "азаза прочитал 10 байт".
Ну и в сторонние либы заинтегрировать логгинг иногда весьма проблематично (I'm looking at you, libzookeeper), поэтому приходится довольствоваться тем, что есть.