You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.0 KiB
60 lines
2.0 KiB
8 years ago
|
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||
9 years ago
|
|
||
|
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
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License. */
|
||
|
|
||
|
#include "CustomStackTrace.h"
|
||
8 years ago
|
#include <gflags/gflags.h>
|
||
9 years ago
|
#include <iostream>
|
||
|
|
||
8 years ago
|
DEFINE_bool(
|
||
8 years ago
|
layer_stack_error_only_current_thread,
|
||
9 years ago
|
true,
|
||
|
"Dump current thread or whole process layer stack when signal error "
|
||
|
"occurred. true means only dump current thread layer stack");
|
||
9 years ago
|
|
||
|
namespace paddle {
|
||
|
|
||
|
CustomStackTrace<std::string> gLayerStackTrace;
|
||
|
|
||
9 years ago
|
static std::mutex gLayerStackTraceMtx;
|
||
|
void installLayerStackTracer() {
|
||
|
logging::installFailureWriter([](const char* data, int sz) {
|
||
|
std::lock_guard<std::mutex> guard(gLayerStackTraceMtx);
|
||
|
if (!gLayerStackTrace.empty()) {
|
||
|
size_t curTid = -1UL;
|
||
|
std::hash<std::thread::id> hasher;
|
||
8 years ago
|
gLayerStackTrace.dump(
|
||
|
[&curTid, &hasher](std::thread::id tid,
|
||
|
bool* isForwarding,
|
||
|
const std::string& layerName) {
|
||
|
if (curTid != hasher(tid)) {
|
||
|
if (curTid != -1UL) {
|
||
|
std::cerr << std::endl;
|
||
|
}
|
||
|
curTid = hasher(tid);
|
||
|
std::cerr << "Thread [" << tid << "] ";
|
||
|
if (isForwarding) {
|
||
|
std::cerr << (*isForwarding ? "Forwarding " : "Backwarding ");
|
||
|
}
|
||
|
}
|
||
|
std::cerr << layerName << ", ";
|
||
|
},
|
||
|
FLAGS_layer_stack_error_only_current_thread);
|
||
9 years ago
|
std::cerr << std::endl;
|
||
|
}
|
||
|
std::cerr.write(data, sz);
|
||
|
});
|
||
|
}
|
||
|
|
||
9 years ago
|
} // namespace paddle
|