Gast
#3824449
Hallo,
ich suche nach einer Möglichkeit, aus _FILE__ und __LINE_ (oder etwas
anderem) eine art hash-Wert zu bilden, den ich für sehr komprimierte
Error logs verwenden möchte, um z.B. die Position eines `asserts`
festzuhalten. _FILE_ möchte ich nur ungern direkt verwenden, weil ich
dann sicherlich eine große Menge an Stringliteralen im Binary hätte.
Folgende zwei Möglichkeiten sind mir bis jetzt eingefallen:
1) eigenen Preprozessor schreiben, der _FILE_ expandiert in einen hash
eindampft:
assert("Geht nicht")
macht der preprozessor
assert_impl("Geht nicht", "test.cpp", 123)
danach müsste der eigene Preprozessor daraus:
assert_impl("Geht nicht", 0x47110815, 123)
machen.
Das verkompliziert den build Prozess natürlich enorm.
2) lokale Funktion definieren und die Adresse nutzen um Code-Stelle fest
zu halten:
assert("Geht nicht")
wird zu:
{
struct foo { void bar() {} }
assert_impl("Geht nicht", &foo::bar )
}
dann müsste man aus den Debug Informationen von der Adresse von bar()
auf die Datei schließen können.
Das sind jetzt nur Skizzen, prinzipiell sollten aber beide Verfahren
funktionieren.
Hat jemand noch eine andere / bessere Idee, wie man eine Zeile im
Quellcode mit einem hash identifizierbar machen kann? Ups, mir düngt
gerade, dass ich wahrscheinlich nach dem Wert des Program Counters
suche.
mfg Torsten