我习惯于这样:
class Db {
_Commit(char *file, int line) {
Log("Commit called from %s:%d", file, line);
}
};
#define Commit() _Commit(__FILE__, __LINE__)
但是最大的问题是,我在全局重新定义了单词Commit
,在一个有400k行代码的应用框架中这是个问题。而且我不想使用特定的单词,比如DbCommit
:我不喜欢像db->DbCommit()
那样的冗余,或者手动在每个地方传递值:db->Commit(__FILE__, __LINE__)
更糟糕。
所以,有什么建议吗?
addr2line
查找函数地址?在这种情况下,您可以使用GCC的__builtin_return_address。记录地址而不是名称并不美观,但是假设您只需要知道何时出了问题(这意味着很少),那么可能会有所帮助。好处是它“只是有效”。我在异常中传递了最后三个调用者,这也可以正常工作(除了难以解密)。 - Damon