いくつかのコードをコンパイルしましたが、エラーが多く、ソースファイルのパス、行番号、未定義の参照など、いくつかの点を示すテーブルを作成したいと思います。単純なawkを使用して最初と2番目を掘り、$ 1、$ 2などを印刷することは大きな問題ではありませんが、未定義の参照は出力の他の場所に表示されるため問題になります。
以下は、私が作成したいスクリプトに解析したいエラーログの一部です。
out/target/product/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h:408: エラー: 'fishy_proto::Service::CopyFrom(fishy_proto未定義の参照 base/fishy/fishy/impl/service.cpp:448: エラー: 'fishy_proto::Service::Service()' の未定義参照 base/fishy/fishy/impl/service.cpp:489: エラー: 'fishy_proto::Service::~Service()' の未定義参照 base/fishy/fishy/impl/service.cpp:489: エラー: 'fishy_proto::Service::~Service()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:51: エラー: 'fishy_proto::ServiceList::ServiceList()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:51: エラー: 'fishy_proto::ServiceList::~ServiceList()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:51: エラー: 'fishy_proto::ServiceList::~ServiceList()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:51: エラー: 'fishy_proto::ServiceList::~ServiceList()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:51: エラー: 'fishy_proto::ServiceList::~ServiceList()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:279: エラー: 'fishy_proto::Request::Request()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:319: エラー: 'fishy_proto::Request::~Request()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:319: エラー: 'fishy_proto::Request::~Request()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:722: エラー: 'fishy_proto::Request::Request()' の未定義参照 out/target/product/phaedra/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h:72: エラー: 'fishy_proto::Request_Type_descriptor()' base/fishy/fishy/impl/service_registry.cpp:762: エラー: 'fishy_proto::Request::~Request()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:762: エラー: 'fishy_proto::Request::~Request()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:463: エラー: 'fishy_proto::Service::Service()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:500: エラー: 'fishy_proto::Service::~Service()' の未定義参照 base/fishy/fishy/impl/service_registry.cpp:500: エラー: 'fishy_proto::Service::~Service()' の未定義参照 external/protobuf/src/google/protobuf/arena.h:649: エラー: 'fishy_proto::ServiceGroup::ServiceGroup()' の未定義参照 external/protobuf/src/google/protobuf/arena.h:309: エラー: 'fishy_proto::ServiceGroup::ServiceGroup()' の未定義参照 external/protobuf/src/google/protobuf/arena.h:649: エラー: 'fishy_proto::Service::Service()' の未定義参照 external/protobuf/src/google/protobuf/arena.h:309: エラー: 'fishy_proto::Service::Service()' の未定義参照
ご覧のとおり、行1と14は、他の行と比較して、他の場所に定義されていない参照を表示します。
正確な位置を無視するがまだ定義されていない参照の値を表示するawkを実行する方法はありますか?
答え1
出力例は、「未定義参照」が常に行awk
の最後のフィールドであることを示します。では、awk
がNF
フィールド数で、$NF
その数が「フィールド数」のフィールドになります。最後のフィールドはあなたが要求したものです。
awk '{print "undefined reference = " $NF}'
答え2
ソースファイルのパス、行番号、未定義参照
sed
解決策:
sed -E 's/^([^:]+):([0-9]+): error: undefined reference to (.*)/\1 \2 \3/' file
出力:
out/target/product/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h 408 'fishy_proto::Service::CopyFrom(fishy_proto::Service const&)'
base/fishy/fishy/impl/service.cpp 448 'fishy_proto::Service::Service()'
base/fishy/fishy/impl/service.cpp 489 'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service.cpp 489 'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 279 'fishy_proto::Request::Request()'
base/fishy/fishy/impl/service_registry.cpp 319 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 319 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 722 'fishy_proto::Request::Request()'
out/target/product/phaedra/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h 72 'fishy_proto::Request_Type_descriptor()'
base/fishy/fishy/impl/service_registry.cpp 762 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 762 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 463 'fishy_proto::Service::Service()'
base/fishy/fishy/impl/service_registry.cpp 500 'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service_registry.cpp 500 'fishy_proto::Service::~Service()'
external/protobuf/src/google/protobuf/arena.h 649 'fishy_proto::ServiceGroup::ServiceGroup()'
external/protobuf/src/google/protobuf/arena.h 309 'fishy_proto::ServiceGroup::ServiceGroup()'
external/protobuf/src/google/protobuf/arena.h 649 'fishy_proto::Service::Service()'
external/protobuf/src/google/protobuf/arena.h 309 'fishy_proto::Service::Service()'
答え3
Perlを使っても大丈夫なら:
perl -pe 's/^(.*?):(\d+): error: undefined reference to (.*)/\1\t\2\t\3/g'
例の出力は次のとおりです。
out/target/product/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h 408 'fishy_proto::Service::CopyFrom(fishy_proto::Service const&)'
base/fishy/fishy/impl/service.cpp 448 'fishy_proto::Service::Service()'
base/fishy/fishy/impl/service.cpp 489 'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service.cpp 489 'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 51 'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp 279 'fishy_proto::Request::Request()'
base/fishy/fishy/impl/service_registry.cpp 319 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 319 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 722 'fishy_proto::Request::Request()'
out/target/product/phaedra/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h 72 'fishy_proto::Request_Type_descriptor()'
base/fishy/fishy/impl/service_registry.cpp 762 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 762 'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp 463 'fishy_proto::Service::Service()'
base/fishy/fishy/impl/service_registry.cpp 500 'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service_registry.cpp 500 'fishy_proto::Service::~Service()'
external/protobuf/src/google/protobuf/arena.h 649 'fishy_proto::ServiceGroup::ServiceGroup()'
external/protobuf/src/google/protobuf/arena.h 309 'fishy_proto::ServiceGroup::ServiceGroup()'
external/protobuf/src/google/protobuf/arena.h 649 'fishy_proto::Service::Service()'
external/protobuf/src/google/protobuf/arena.h 309 'fishy_proto::Service::Service()'
答え4
私はsed viaを使ってやりました。
sed -ne "s/\(.*error:\)\(.*reference to \)\('.*'\)/\1\3/p" inputfile
出力
out/target/product/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h:408: error:'fishy_proto::Service::CopyFrom(fishy_proto::Service const&)'
base/fishy/fishy/impl/service.cpp:448: error:'fishy_proto::Service::Service()'
base/fishy/fishy/impl/service.cpp:489: error:'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service.cpp:489: error:'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service_registry.cpp:51: error:'fishy_proto::ServiceList::ServiceList()'
base/fishy/fishy/impl/service_registry.cpp:51: error:'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp:51: error:'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp:51: error:'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp:51: error:'fishy_proto::ServiceList::~ServiceList()'
base/fishy/fishy/impl/service_registry.cpp:279: error:'fishy_proto::Request::Request()'
base/fishy/fishy/impl/service_registry.cpp:319: error:'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp:319: error:'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp:722: error:'fishy_proto::Request::Request()'
out/target/product/phaedra/gen/SHARED_LIBRARIES/libfishy_proto_intermediates/proto/base/fishy/fishy/prefix/fishy_proto/service_registry.pb.h:72: error:'fishy_proto::Request_Type_descriptor()'
base/fishy/fishy/impl/service_registry.cpp:762: error:'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp:762: error:'fishy_proto::Request::~Request()'
base/fishy/fishy/impl/service_registry.cpp:463: error:'fishy_proto::Service::Service()'
base/fishy/fishy/impl/service_registry.cpp:500: error:'fishy_proto::Service::~Service()'
base/fishy/fishy/impl/service_registry.cpp:500: error:'fishy_proto::Service::~Service()'
external/protobuf/src/google/protobuf/arena.h:649: error:'fishy_proto::ServiceGroup::ServiceGroup()'
external/protobuf/src/google/protobuf/arena.h:309: error:'fishy_proto::ServiceGroup::ServiceGroup()'
external/protobuf/src/google/protobuf/arena.h:649: error:'fishy_proto::Service::Service()'
external/protobuf/src/google/protobuf/arena.h:309: error:'fishy_proto::Service::Service()'