簡體   English   中英

如何獲取__LINE__報告的整個字符串

[英]How to get the entire string reported by __LINE__

是否有可能通過LINE宏在線報告整個字符串。 樣例代碼:

#include <stdio.h>

#define LOG(lvl) pLog(lvl, __LINE__, __FILE__)

pLog(const char *str, int line, const char *file)
{
    printf("Line [%u]: File [%s]", line, file);
}

int main ()
{
    LOG("Hello"
            "world");
    return 0;
}

輸出為:行[13]:文件[macro.c]

現在,在大型代碼庫中,我想搜索該文件並打印報告行上存在的字符串“ Hello world”(在本例中為13)

我想的一種方法是先搜索該文件,然后使用gcc -E do grep生成pLog並保存其字符串,然后在實際代碼文件中保存LOG的grep並保存行號與行號匹配,並將行號與結果,然后匹配索引並打印字符串。

由於字符串可以分布在多行中(如代碼中Hello在一行中,而world在另一行中),因此也需要注意這一點。

是否還有其他最佳,快速的方法或gcc提供了一些將回行和文件轉換為實際代碼的選項

使用Clang非常容易做到這一點。 以下命令將文件test.c抽象語法樹(AST)轉儲到文件out

clang -cc1 -ast-dump test.c > out

查看生成的文件中的AST,您可以輕松找到所需的信息:

(StringLiteral 0x1376cd8 <line:12:9, line:13:13> 'char [11]' lvalue "Helloworld")))

Clang給出字符串的第一個標記(行:12:9)的開頭,字符串的最后的標記(行:13:13)的開頭和完整的字符串(“ Helloworld”)。

您可以解析AST轉儲,也可以使用Clang API獲得相同的信息。 如果這不是一項一次性的任務,那么我會選擇API,因為AST轉儲格式將來很有可能會發生變化。

所有這些當然只有在您有理由不在pLog本身中打印字符串時才有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM