Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Side by Side Diff: base/logging.cc

Issue 62140: Print backtraces on FATAL log messages in debug mode. (Closed)
Patch Set: Add todo for stackwalk64 Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/debug_util_win.cc ('k') | build/common.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 typedef HANDLE FileHandle; 9 typedef HANDLE FileHandle;
10 typedef HANDLE MutexHandle; 10 typedef HANDLE MutexHandle;
11 #elif defined(OS_MACOSX) 11 #elif defined(OS_MACOSX)
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 } else { 513 } else {
514 log_lock->Unlock(); 514 log_lock->Unlock();
515 } 515 }
516 } 516 }
517 517
518 if (severity_ == LOG_FATAL) { 518 if (severity_ == LOG_FATAL) {
519 // display a message or break into the debugger on a fatal error 519 // display a message or break into the debugger on a fatal error
520 if (DebugUtil::BeingDebugged()) { 520 if (DebugUtil::BeingDebugged()) {
521 DebugUtil::BreakDebugger(); 521 DebugUtil::BreakDebugger();
522 } else { 522 } else {
523 #ifndef NDEBUG
524 // Dump a stack trace on a fatal.
525 StackTrace trace;
526 stream_ << "\n"; // Newline to separate from log message.
527 trace.OutputToStream(&stream_);
528 #endif
529
523 if (log_assert_handler) { 530 if (log_assert_handler) {
524 // make a copy of the string for the handler out of paranoia 531 // make a copy of the string for the handler out of paranoia
525 log_assert_handler(std::string(stream_.str())); 532 log_assert_handler(std::string(stream_.str()));
526 } else { 533 } else {
527 // Don't use the string with the newline, get a fresh version to send to 534 // Don't use the string with the newline, get a fresh version to send to
528 // the debug message process. We also don't display assertions to the 535 // the debug message process. We also don't display assertions to the
529 // user in release mode. The enduser can't do anything with this 536 // user in release mode. The enduser can't do anything with this
530 // information, and displaying message boxes when the application is 537 // information, and displaying message boxes when the application is
531 // hosed can cause additional problems. 538 // hosed can cause additional problems.
532 #ifndef NDEBUG 539 #ifndef NDEBUG
(...skipping 14 matching lines...) Expand all
547 } 554 }
548 555
549 void CloseLogFile() { 556 void CloseLogFile() {
550 if (!log_file) 557 if (!log_file)
551 return; 558 return;
552 559
553 CloseFile(log_file); 560 CloseFile(log_file);
554 log_file = NULL; 561 log_file = NULL;
555 } 562 }
556 563
557 } // namespace logging 564 } // namespace logging
558 565
559 std::ostream& operator<<(std::ostream& out, const wchar_t* wstr) { 566 std::ostream& operator<<(std::ostream& out, const wchar_t* wstr) {
560 return out << base::SysWideToUTF8(std::wstring(wstr)); 567 return out << base::SysWideToUTF8(std::wstring(wstr));
561 } 568 }
OLDNEW
« no previous file with comments | « base/debug_util_win.cc ('k') | build/common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698