| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // base/kaldi-error-test.cc
- // Copyright 2009-2011 Microsoft Corporation
- // See ../../COPYING for clarification regarding multiple authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- // KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
- // WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
- // MERCHANTABLITY OR NON-INFRINGEMENT.
- // See the Apache 2 License for the specific language governing permissions and
- // limitations under the License.
- #include "base/kaldi-common.h"
- // testing that we get the stack trace.
- namespace kaldi {
- void MyFunction2() { KALDI_ERR << "Ignore this error"; }
- void MyFunction1() { MyFunction2(); }
- void UnitTestError() {
- {
- std::cerr << "Ignore next error:\n";
- MyFunction1();
- }
- }
- void VerifySymbolRange(const std::string &trace, const bool want_found,
- const std::string &want_symbol) {
- size_t begin, end;
- const bool found = internal::LocateSymbolRange(trace, &begin, &end);
- if (found != want_found) {
- KALDI_ERR << "Found mismatch, got " << found << " want " << want_found;
- }
- if (!found) {
- return;
- }
- const std::string symbol = trace.substr(begin, end - begin);
- if (symbol != want_symbol) {
- KALDI_ERR << "Symbol mismatch, got " << symbol << " want " << want_symbol;
- }
- }
- void TestLocateSymbolRange() {
- VerifySymbolRange("", false, "");
- VerifySymbolRange(
- R"TRACE(./kaldi-error-test(_ZN5kaldi13UnitTestErrorEv+0xb) [0x804965d])TRACE",
- true, "_ZN5kaldi13UnitTestErrorEv");
- // It is ok thread_start is not found because it is a C symbol.
- VerifySymbolRange(
- R"TRACE(31 libsystem_pthread.dylib 0x00007fff6fe4e40d thread_start + 13)TRACE",
- false, "");
- VerifySymbolRange(
- R"TRACE(0 server 0x000000010f67614d _ZNK5kaldi13MessageLogger10LogMessageEv + 813)TRACE",
- true, "_ZNK5kaldi13MessageLogger10LogMessageEv");
- VerifySymbolRange(
- R"TRACE(29 libsystem_pthread.dylib 0x00007fff6fe4f2eb _pthread_body + 126)TRACE",
- true, "_pthread_body");
- }
- } // namespace kaldi
- int main() {
- kaldi::TestLocateSymbolRange();
- kaldi::SetProgramName("/foo/bar/kaldi-error-test");
- try {
- kaldi::UnitTestError();
- KALDI_ASSERT(0); // should not happen.
- exit(1);
- } catch (kaldi::KaldiFatalError &e) {
- std::cout << "The error we generated was: '" << e.KaldiMessage() << "'\n";
- }
- }
|