Update links

code.google.com is obsolete.

Fix all broken markdown links while at it.

Change-Id: I6a337bf4b84eacd5f5c749a4ee61331553279009
Reviewed-on: https://chromium-review.googlesource.com/411800
Reviewed-by: Mike Frysinger <vapier@chromium.org>
This commit is contained in:
Orgad Shaneh 2016-11-15 15:06:22 +02:00 committed by Mike Frysinger
parent 8e2448bceb
commit 11d7510c08
12 changed files with 71 additions and 96 deletions

View File

@ -69,8 +69,8 @@ amount of work from a crashed process.
The mechanisms for installing an exception handler vary between operating The mechanisms for installing an exception handler vary between operating
systems. On Windows, its a relatively simple matter of making one call to systems. On Windows, its a relatively simple matter of making one call to
register a [top-level exception filter] register a [top-level exception
(http://msdn.microsoft.com/library/en-us/debug/base/setunhandledexceptionfilter.asp) filter](http://msdn.microsoft.com/library/en-us/debug/base/setunhandledexceptionfilter.asp)
callback function. On most Unix-like systems such as Linux, processes are callback function. On most Unix-like systems such as Linux, processes are
informed of exceptions by the delivery of a signal, so an exception handler informed of exceptions by the delivery of a signal, so an exception handler
takes the form of a signal handler. The native mechanism to catch exceptions on takes the form of a signal handler. The native mechanism to catch exceptions on
@ -178,9 +178,8 @@ didnt actually handle an exception. This function may be useful for developer
who want to test their applications with Breakpad enabled but still retain the who want to test their applications with Breakpad enabled but still retain the
ability to use traditional debugging techniques. It also allows a ability to use traditional debugging techniques. It also allows a
Breakpad-enabled application to coexist with a platforms native crash reporting Breakpad-enabled application to coexist with a platforms native crash reporting
system, such as Mac OS X [CrashReporter] system, such as Mac OS X [CrashReporter](http://developer.apple.com/technotes/tn2004/tn2123.html)
(http://developer.apple.com/technotes/tn2004/tn2123.html) and [Windows Error and [Windows Error Reporting](http://msdn.microsoft.com/isv/resources/wer/).
Reporting](http://msdn.microsoft.com/isv/resources/wer/).
Typically, when Breakpad handles an exception fully and no debuggers are Typically, when Breakpad handles an exception fully and no debuggers are
involved, the crashed process will terminate. involved, the crashed process will terminate.

View File

@ -9,8 +9,7 @@ minidumps on request for programs that have not crashed.
Breakpad is currently used by Google Chrome, Firefox, Google Picasa, Camino, Breakpad is currently used by Google Chrome, Firefox, Google Picasa, Camino,
Google Earth, and other projects. Google Earth, and other projects.
![http://google-breakpad.googlecode.com/svn/wiki/breakpad.png] ![Workflow](breakpad.png)
(http://google-breakpad.googlecode.com/svn/wiki/breakpad.png)
Breakpad has three main components: Breakpad has three main components:
@ -90,7 +89,7 @@ known as "out-of-process" exception handling.
## Breakpad Code Overview ## Breakpad Code Overview
All the client-side code is found by visiting the Google Project at All the client-side code is found by visiting the Google Project at
http://code.google.com/p/google-breakpad. The following directory structure is https://chromium.googlesource.com/breakpad/breakpad. The following directory structure is
present in the `src` directory: present in the `src` directory:
* `processor` Contains minidump-processing code that is used on the server * `processor` Contains minidump-processing code that is used on the server
@ -101,14 +100,9 @@ present in the `src` directory:
(Among other directories) (Among other directories)
* <a * [Windows Integration Guide](windows_client_integration.md)
href='http://code.google.com/p/google-breakpad/wiki/WindowsClientIntegration'>Windows * [Mac Integration Guide](mac_breakpad_starter_guide.md)
Integration Guide</a> * [Linux Integration Guide](linux_starter_guide.md)
* <a
href='http://code.google.com/p/google-breakpad/wiki/MacBreakpadStarterGuide'>Mac
Integration Guide</a>
* <a href='http://code.google.com/p/google-breakpad/wiki/LinuxStarterGuide'>
Linux Integration Guide</a>
## Build process specifics(symbol generation) ## Build process specifics(symbol generation)

View File

@ -75,10 +75,8 @@
## More Information ## More Information
* Project home: http://code.google.com/p/google-breakpad/ * Project home: https://chromium.googlesource.com/breakpad/breakpad
* Mailing lists * Mailing lists
* [google-breakpad-dev@googlegroups.com] * [google-breakpad-dev@googlegroups.com](http://groups.google.com/group/google-breakpad-dev/)
(http://groups.google.com/group/google-breakpad-dev/) * [google-breakpad-discuss@googlegroups.com](http://groups.google.com/group/google-breakpad-discuss/)
* [google-breakpad-discuss@googlegroups.com]
(http://groups.google.com/group/google-breakpad-discuss/)
* Ask me (irc.mozilla.org: mento) * Ask me (irc.mozilla.org: mento)

View File

@ -13,8 +13,9 @@ The Breakpad processor is intended to sit at the core of a comprehensive
crash-reporting system that does not require debugging information to be crash-reporting system that does not require debugging information to be
provided to those running applications being monitored. Some existing provided to those running applications being monitored. Some existing
crash-reporting systems, such as [GNOME](http://www.gnome.org/)s Bug-Buddy and crash-reporting systems, such as [GNOME](http://www.gnome.org/)s Bug-Buddy and
[Apple](http://www.apple.com/)s [CrashReporter] [Apple](http://www.apple.com/)s
(http://developer.apple.com/technotes/tn2004/tn2123.html), require symbolic [CrashReporter](http://developer.apple.com/technotes/tn2004/tn2123.html),
require symbolic
information to be present on the end users computer; in the case of information to be present on the end users computer; in the case of
CrashReporter, the reports are transmitted only to Apple, not to third-party CrashReporter, the reports are transmitted only to Apple, not to third-party
developers. Other systems, such as [Microsoft](http://www.microsoft.com/)s developers. Other systems, such as [Microsoft](http://www.microsoft.com/)s
@ -81,13 +82,12 @@ set to produce dumps at any time a developer deems appropriate. The Breakpad
processor can handle dumps in the minidump format, either generated by an processor can handle dumps in the minidump format, either generated by an
[Breakpad client “handler”](client_design.md) implementation, or by another [Breakpad client “handler”](client_design.md) implementation, or by another
implementation that produces dumps in this format. The implementation that produces dumps in this format. The
[DbgHelp.dll!MiniDumpWriteDump] [DbgHelp.dll!MiniDumpWriteDump](http://msdn2.microsoft.com/en-us/library/ms680360.aspx)
(http://msdn2.microsoft.com/en-us/library/ms680360.aspx) function on Windows function on Windows
produces dumps in this format, and is the basis for the Breakpad handler produces dumps in this format, and is the basis for the Breakpad handler
implementation on that platform. implementation on that platform.
The [minidump format] The [minidump format](http://msdn.microsoft.com/en-us/library/ms679293%28VS.85%29.aspx) is
(http://msdn.microsoft.com/en-us/library/ms679293%28VS.85%29.aspx) is
essentially a simple container format, organized as a series of streams. Each essentially a simple container format, organized as a series of streams. Each
stream contains some type of data relevant to the crash. A typical “normal” stream contains some type of data relevant to the crash. A typical “normal”
minidump contains streams for the thread list, the module list, the CPU context minidump contains streams for the thread list, the module list, the CPU context
@ -155,11 +155,12 @@ storage needs.
Breakpads symbol file format is text-based, and was defined to be fairly Breakpads symbol file format is text-based, and was defined to be fairly
human-readable and to encompass the needs of multiple platforms. The Breakpad human-readable and to encompass the needs of multiple platforms. The Breakpad
processor itself does not operate directly with native symbol formats ([DWARF] processor itself does not operate directly with native symbol formats
(http://dwarf.freestandards.org/) and [STABS] ([DWARF](http://dwarf.freestandards.org/) and
(http://sourceware.org/gdb/current/onlinedocs/stabs.html) on most Unix-like [STABS](http://sourceware.org/gdb/current/onlinedocs/stabs.html)
systems, [.pdb files] on most Unix-like systems,
(http://msdn2.microsoft.com/en-us/library/yd4f8bd1(VS.80).aspx) on Windows), [.pdb files](http://msdn2.microsoft.com/en-us/library/yd4f8bd1(VS.80).aspx)
on Windows),
because of the complications in accessing potentially complex symbol formats because of the complications in accessing potentially complex symbol formats
with slight variations between platforms, stored within different types of with slight variations between platforms, stored within different types of
binary formats. In the case of `.pdb` files, the debugging format is not even binary formats. In the case of `.pdb` files, the debugging format is not even

View File

@ -8,16 +8,12 @@ traces from the information contained within a minidump file.
## Starting the Process ## Starting the Process
Typically the stack walking process is initiated by instantiating the Typically the stack walking process is initiated by instantiating the
[MinidumpProcessor] [MinidumpProcessor](../src/processor/minidump_processor.cc)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/processor/minidump_processor.cc) class and calling the [MinidumpProcessor::Process](../src/processor/minidump_processor.cc#61)
class and calling the [MinidumpProcessor::Process]
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/processor/minidump_processor.cc#61)
method, providing it a minidump file to process. To produce a useful stack method, providing it a minidump file to process. To produce a useful stack
trace, the MinidumpProcessor requires two other objects which are passed in its trace, the MinidumpProcessor requires two other objects which are passed in its
constructor: a [SymbolSupplier] constructor: a [SymbolSupplier](../src/google_breakpad/processor/symbol_supplier.h)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/symbol_supplier.h) and a [SourceLineResolverInterface](../src/google_breakpad/processor/source_line_resolver_interface.h).
and a [SourceLineResolverInterface]
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/source_line_resolver_interface.h).
The SymbolSupplier object is responsible for locating and providing SymbolFiles The SymbolSupplier object is responsible for locating and providing SymbolFiles
that match modules from the minidump. The SourceLineResolverInterface is that match modules from the minidump. The SourceLineResolverInterface is
responsible for loading the symbol files and using the information contained responsible for loading the symbol files and using the information contained
@ -26,29 +22,26 @@ information on how to unwind from a stack frame to its caller. More detail will
be provided on these interactions later. be provided on these interactions later.
A number of data streams are extracted from the minidump to begin stack walking: A number of data streams are extracted from the minidump to begin stack walking:
the list of threads from the process ([MinidumpThreadList] the list of threads from the process
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/minidump.h#335)), ([MinidumpThreadList](../src/google_breakpad/processor/minidump.h#335)),
the list of modules loaded in the process ([MinidumpModuleList] the list of modules loaded in the process
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/minidump.h#501)), ([MinidumpModuleList](../src/google_breakpad/processor/minidump.h#501)),
and information about the exception that caused the process to crash and information about the exception that caused the process to crash
([MinidumpException] ([MinidumpException](../src/google_breakpad/processor/minidump.h#615)).
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/minidump.h#615)).
## Enumerating Threads ## Enumerating Threads
For each thread in the thread list ([MinidumpThread] For each thread in the thread list
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/minidump.h#299)), ([MinidumpThread](../src/google_breakpad/processor/minidump.h#299)),
the thread memory containing the stack for the thread ([MinidumpMemoryRegion] the thread memory containing the stack for the thread
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/minidump.h#236)) ([MinidumpMemoryRegion](../src/google_breakpad/processor/minidump.h#236))
and the CPU context representing the CPU state of the thread at the time the and the CPU context representing the CPU state of the thread at the time the
dump was written ([MinidumpContext] dump was written ([MinidumpContext](../src/google_breakpad/processor/minidump.h#171))
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/minidump.h#171))
are extracted from the minidump. If the thread being processed is the thread are extracted from the minidump. If the thread being processed is the thread
that produced the exception then a CPU context is obtained from the that produced the exception then a CPU context is obtained from the
MinidumpException object instead, which represents the CPU state of the thread MinidumpException object instead, which represents the CPU state of the thread
at the point of the exception. A stack walker is then instantiated by calling at the point of the exception. A stack walker is then instantiated by calling
the [Stackwalker::StackwalkerForCPU] the [Stackwalker::StackwalkerForCPU](../src/google_breakpad/processor/stackwalker.h#77)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/stackwalker.h#77)
method and passing it the CPU context, the thread memory, the module list, as method and passing it the CPU context, the thread memory, the module list, as
well as the SymbolSupplier and SourceLineResolverInterface. This method selects well as the SymbolSupplier and SourceLineResolverInterface. This method selects
the specific !Stackwalker subclass based on the CPU architecture of the provided the specific !Stackwalker subclass based on the CPU architecture of the provided
@ -57,8 +50,7 @@ CPU context and returns an instance of that subclass.
## Walking a thread's stack ## Walking a thread's stack
Once a !Stackwalker instance has been obtained, the processor calls the Once a !Stackwalker instance has been obtained, the processor calls the
[Stackwalker::Walk] [Stackwalker::Walk](../src/google_breakpad/processor/source_line_resolver_interface.h)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/source_line_resolver_interface.h)
method to obtain a list of frames representing the stack of this thread. The method to obtain a list of frames representing the stack of this thread. The
!Stackwalker starts by calling the GetContextFrame method which returns a !Stackwalker starts by calling the GetContextFrame method which returns a
StackFrame representing the top of the stack, with CPU state provided by the StackFrame representing the top of the stack, with CPU state provided by the
@ -69,28 +61,24 @@ for each frame in turn:
The address of the instruction pointer of the current frame is used to determine The address of the instruction pointer of the current frame is used to determine
which module contains the current frame by calling the module list's which module contains the current frame by calling the module list's
[GetModuleForAddress] [GetModuleForAddress](../src/google_breakpad/processor/code_modules.h#56) method.
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/code_modules.h#56)
method.
### Locating Symbols ### Locating Symbols
If a module is located, the SymbolSupplier is asked to locate symbols If a module is located, the SymbolSupplier is asked to locate symbols
corresponding to the module by calling its [GetCStringSymbolData] corresponding to the module by calling its
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/symbol_supplier.h#87) [GetCStringSymbolData](../src/google_breakpad/processor/symbol_supplier.h#87)
method. Typically this is implemented by using the module's debug filename (the method. Typically this is implemented by using the module's debug filename (the
PDB filename for Windows dumps) and debug identifier (a GUID plus one extra PDB filename for Windows dumps) and debug identifier (a GUID plus one extra
digit) as a lookup key. The [SimpleSymbolSupplier] digit) as a lookup key. The [SimpleSymbolSupplier](../src/processor/simple_symbol_supplier.cc)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/processor/simple_symbol_supplier.cc)
class simply uses these as parts of a file path to locate a flat file on disk. class simply uses these as parts of a file path to locate a flat file on disk.
### Loading Symbols ### Loading Symbols
If a symbol file is located, the SourceLineResolverInterface is then asked to If a symbol file is located, the SourceLineResolverInterface is then asked to
load the symbol file by calling its [LoadModuleUsingMemoryBuffer] load the symbol file by calling its
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/source_line_resolver_interface.h#71) [LoadModuleUsingMemoryBuffer](../src/google_breakpad/processor/source_line_resolver_interface.h#71)
method. The [BasicSourceLineResolver] method. The [BasicSourceLineResolver](../src/processor/basic_source_line_resolver.cc)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/processor/basic_source_line_resolver.cc)
implementation parses the text-format [symbol file](symbol_files.md) into implementation parses the text-format [symbol file](symbol_files.md) into
in-memory data structures to make lookups by address of function names, source in-memory data structures to make lookups by address of function names, source
line information, and unwind information easy. line information, and unwind information easy.
@ -98,8 +86,7 @@ line information, and unwind information easy.
### Getting source line information ### Getting source line information
If a symbol file has been successfully loaded, the SourceLineResolverInterface's If a symbol file has been successfully loaded, the SourceLineResolverInterface's
[FillSourceLineInfo] [FillSourceLineInfo](../src/google_breakpad/processor/source_line_resolver_interface.h#89)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/source_line_resolver_interface.h#89)
method is called to provide a function name and source line information for the method is called to provide a function name and source line information for the
current frame. This is done by subtracting the base address of the module current frame. This is done by subtracting the base address of the module
containing the current frame from the instruction pointer of the current frame containing the current frame from the instruction pointer of the current frame
@ -119,17 +106,15 @@ nearest symbol that is less than the provided RVA.
### Finding the caller frame ### Finding the caller frame
To find the next frame in the stack, the !Stackwalker calls its [GetCallerFrame] To find the next frame in the stack, the !Stackwalker calls its
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/stackwalker.h#186) [GetCallerFrame](../src/google_breakpad/processor/stackwalker.h#186)
method, passing in the current frame. Each !Stackwalker subclass implements method, passing in the current frame. Each !Stackwalker subclass implements
GetCallerFrame differently, but there are common patterns. GetCallerFrame differently, but there are common patterns.
Typically the first step is to query the SourceLineResolverInterface for the Typically the first step is to query the SourceLineResolverInterface for the
presence of detailed unwind information. This is done using its presence of detailed unwind information. This is done using its
[FindWindowsFrameInfo] [FindWindowsFrameInfo](../src/google_breakpad/processor/source_line_resolver_interface.h#96)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/source_line_resolver_interface.h#96) and [FindCFIFrameInfo](../src/google_breakpad/processor/source_line_resolver_interface.h#102)
and [FindCFIFrameInfo]
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/source_line_resolver_interface.h#102)
methods. These methods look for Windows unwind info extracted from a PDB file methods. These methods look for Windows unwind info extracted from a PDB file
([STACK WIN](SymbolFiles#STACK_WIN_records.md) lines from the symbol file), or ([STACK WIN](SymbolFiles#STACK_WIN_records.md) lines from the symbol file), or
DWARF CFI extracted from a binary ([STACK CFI](SymbolFiles#STACK_CFI_records.md) DWARF CFI extracted from a binary ([STACK CFI](SymbolFiles#STACK_CFI_records.md)
@ -148,12 +133,11 @@ to produce the caller frame.
If no caller frame was found by any other method most !Stackwalker If no caller frame was found by any other method most !Stackwalker
implementations resort to stack scanning by looking at each word on the stack implementations resort to stack scanning by looking at each word on the stack
down to a fixed depth (implemented in the [Stackwalker::ScanForReturnAddress] down to a fixed depth (implemented in the
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/stackwalker.h#131) [Stackwalker::ScanForReturnAddress](../src/google_breakpad/processor/stackwalker.h#131)
method) and using a heuristic to attempt to find a reasonable return address method) and using a heuristic to attempt to find a reasonable return address
(implemented in the [Stackwalker::InstructionAddressSeemsValid] (implemented in the
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/google_breakpad/processor/stackwalker.h#111) [Stackwalker::InstructionAddressSeemsValid](../src/google_breakpad/processor/stackwalker.h#111) method).
method).
If no caller frame is found or the caller frame seems invalid, stack walking If no caller frame is found or the caller frame seems invalid, stack walking
stops. If a caller frame was found then these steps repeat using the new frame stops. If a caller frame was found then these steps repeat using the new frame

View File

@ -197,10 +197,10 @@ All fields of a `STACK WIN` record, except for the last, are hexadecimal
numbers. numbers.
The _type_ field indicates what sort of stack frame data this record holds. Its The _type_ field indicates what sort of stack frame data this record holds. Its
value should be one of the values of the [StackFrameTypeEnum] value should be one of the values of the
(http://msdn.microsoft.com/en-us/library/bc5207xw%28VS.100%29.aspx) type in [StackFrameTypeEnum](http://msdn.microsoft.com/en-us/library/bc5207xw%28VS.100%29.aspx)
Microsoft's [Debug Interface Access (DIA)] type in Microsoft's
(http://msdn.microsoft.com/en-us/library/x93ctkx8%28VS.100%29.aspx) API. [Debug Interface Access (DIA)](http://msdn.microsoft.com/en-us/library/x93ctkx8%28VS.100%29.aspx) API.
Breakpad uses only records of type 4 (`FrameTypeFrameData`) and 0 Breakpad uses only records of type 4 (`FrameTypeFrameData`) and 0
(`FrameTypeFPO`); it ignores others. These types differ only in whether the last (`FrameTypeFPO`); it ignores others. These types differ only in whether the last
field is an _allocates\_base\_pointer_ flag (`FrameTypeFPO`) or a program string field is an _allocates\_base\_pointer_ flag (`FrameTypeFPO`) or a program string
@ -274,8 +274,7 @@ follows:
* If the _has\_program\_string_ field of a `STACK WIN` record is not zero, * If the _has\_program\_string_ field of a `STACK WIN` record is not zero,
then the record's final field is a string containing a program to be then the record's final field is a string containing a program to be
interpreted to recover the caller's frame. The comments in the interpreted to recover the caller's frame. The comments in the
[postfix\_evaluator.h] [postfix\_evaluator.h](../src/processor/postfix_evaluator.h#40)
(http://code.google.com/p/google-breakpad/source/browse/trunk/src/processor/postfix_evaluator.h#40)
header file explain the language in which the program is written. You should header file explain the language in which the program is written. You should
place the following variables in the dictionary before interpreting the place the following variables in the dictionary before interpreting the
program: program:

View File

@ -126,7 +126,7 @@ extern "C" {
mach_msg_header_t* reply); mach_msg_header_t* reply);
// This symbol must be visible to dlsym() - see // This symbol must be visible to dlsym() - see
// http://code.google.com/p/google-breakpad/issues/detail?id=345 for details. // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=345 for details.
kern_return_t catch_exception_raise(mach_port_t target_port, kern_return_t catch_exception_raise(mach_port_t target_port,
mach_port_t failed_thread, mach_port_t failed_thread,
mach_port_t task, mach_port_t task,
@ -464,7 +464,7 @@ kern_return_t ForwardException(mach_port_t task, mach_port_t failed_thread,
kern_return_t result; kern_return_t result;
// TODO: Handle the case where |target_behavior| has MACH_EXCEPTION_CODES // TODO: Handle the case where |target_behavior| has MACH_EXCEPTION_CODES
// set. https://code.google.com/p/google-breakpad/issues/detail?id=551 // set. https://bugs.chromium.org/p/google-breakpad/issues/detail?id=551
switch (target_behavior) { switch (target_behavior) {
case EXCEPTION_DEFAULT: case EXCEPTION_DEFAULT:
result = exception_raise(target_port, failed_thread, task, exception, result = exception_raise(target_port, failed_thread, task, exception,

View File

@ -202,7 +202,7 @@ bool CrashGenerator::CreateChildCrash(
// On Android the signal sometimes doesn't seem to get sent even though // On Android the signal sometimes doesn't seem to get sent even though
// tkill returns '0'. Retry a couple of times if the signal doesn't get // tkill returns '0'. Retry a couple of times if the signal doesn't get
// through on the first go: // through on the first go:
// https://code.google.com/p/google-breakpad/issues/detail?id=579 // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=579
#if defined(__ANDROID__) #if defined(__ANDROID__)
const int kRetries = 60; const int kRetries = 60;
const unsigned int kSleepTimeInSeconds = 1; const unsigned int kSleepTimeInSeconds = 1;

View File

@ -117,7 +117,7 @@
// developer level errors. This implementation simply macros to NSLog/NSAssert. // developer level errors. This implementation simply macros to NSLog/NSAssert.
// It is not intended to be a general logging/reporting system. // It is not intended to be a general logging/reporting system.
// //
// Please see http://code.google.com/p/google-toolbox-for-mac/wiki/DevLogNAssert // Please see https://github.com/google/google-toolbox-for-mac/wiki/DevLogNAssert
// for a little more background on the usage of these macros. // for a little more background on the usage of these macros.
// //
// _GTMDevLog log some error/problem in debug builds // _GTMDevLog log some error/problem in debug builds

View File

@ -74,7 +74,7 @@ using std::vector;
// Returns true iff |context_size| matches exactly one of the sizes of the // Returns true iff |context_size| matches exactly one of the sizes of the
// various MDRawContext* types. // various MDRawContext* types.
// TODO(blundell): This function can be removed once // TODO(blundell): This function can be removed once
// http://code.google.com/p/google-breakpad/issues/detail?id=550 is fixed. // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=550 is fixed.
static bool IsContextSizeUnique(uint32_t context_size) { static bool IsContextSizeUnique(uint32_t context_size) {
int num_matching_contexts = 0; int num_matching_contexts = 0;
if (context_size == sizeof(MDRawContextX86)) if (context_size == sizeof(MDRawContextX86))
@ -473,7 +473,7 @@ bool MinidumpContext::Read(uint32_t expected_size) {
if (cpu_type != MD_CONTEXT_AMD64) { if (cpu_type != MD_CONTEXT_AMD64) {
// TODO: Fall through to switch below. // TODO: Fall through to switch below.
// http://code.google.com/p/google-breakpad/issues/detail?id=550 // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=550
BPLOG(ERROR) << "MinidumpContext not actually amd64 context"; BPLOG(ERROR) << "MinidumpContext not actually amd64 context";
return false; return false;
} }
@ -575,7 +575,7 @@ bool MinidumpContext::Read(uint32_t expected_size) {
if (cpu_type != MD_CONTEXT_PPC64) { if (cpu_type != MD_CONTEXT_PPC64) {
// TODO: Fall through to switch below. // TODO: Fall through to switch below.
// http://code.google.com/p/google-breakpad/issues/detail?id=550 // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=550
BPLOG(ERROR) << "MinidumpContext not actually ppc64 context"; BPLOG(ERROR) << "MinidumpContext not actually ppc64 context";
return false; return false;
} }
@ -672,7 +672,7 @@ bool MinidumpContext::Read(uint32_t expected_size) {
if (cpu_type != MD_CONTEXT_ARM64) { if (cpu_type != MD_CONTEXT_ARM64) {
// TODO: Fall through to switch below. // TODO: Fall through to switch below.
// http://code.google.com/p/google-breakpad/issues/detail?id=550 // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=550
BPLOG(ERROR) << "MinidumpContext not actually arm64 context"; BPLOG(ERROR) << "MinidumpContext not actually arm64 context";
return false; return false;
} }

View File

@ -1,5 +1,5 @@
If you wish to use these protobufs, you must generate their source files If you wish to use these protobufs, you must generate their source files
using protoc from the protobuf project (http://code.google.com/p/protobuf/). using protoc from the protobuf project (https://github.com/google/protobuf).
----- -----
Troubleshooting for Protobuf: Troubleshooting for Protobuf:

View File

@ -514,7 +514,7 @@ bool IsBoolFlag(bool from);
// great together! // great together!
// The weird 'using' + 'extern' inside the fLS namespace is to work around // The weird 'using' + 'extern' inside the fLS namespace is to work around
// an unknown compiler bug/issue with the gcc 4.2.1 on SUSE 10. See // an unknown compiler bug/issue with the gcc 4.2.1 on SUSE 10. See
// http://code.google.com/p/google-gflags/issues/detail?id=20 // https://github.com/gflags/gflags/issues/31
#define DEFINE_string(name, val, txt) \ #define DEFINE_string(name, val, txt) \
namespace fLS { \ namespace fLS { \
static union { void* align; char s[sizeof(std::string)]; } s_##name[2]; \ static union { void* align; char s[sizeof(std::string)]; } s_##name[2]; \