Google Breakpad part 1 : Getting Started With Windows Client

时间:2022-02-24 22:15:22

准备

1、Python

2、Visual Studio

3、svn checkout http://google-breakpad.googlecode.com/svn/trunk/ source code

编译

1、转到google-breakpad根目录下,打开命令行,运行 src\tools\gyp\gyp.bat src\client\windows\breakpad_client.gyp  --no-circular-check
如果不加 --no-circular-check 参数,将会看到以下信息:
Traceback (most recent call last):
File "D:\google_breakpad\src\tools\gyp\/gyp", line , in <module>
sys.exit(gyp.main(sys.argv[:]))
File "D:\google_breakpad\src\tools\gyp\pylib\gyp\__init__.py", line , in main
return gyp_main(args)
File "D:\google_breakpad\src\tools\gyp\pylib\gyp\__init__.py", line , in gyp_main
options.circular_check)
File "D:\google_breakpad\src\tools\gyp\pylib\gyp\__init__.py", line , in Load
depth, generator_input_info, check, circular_check)
File "D:\google_breakpad\src\tools\gyp\pylib\gyp\input.py", line , in Load
VerifyNoGYPFileCircularDependencies(targets)
File "D:\google_breakpad\src\tools\gyp\pylib\gyp\input.py", line , in Veri
fyNoGYPFileCircularDependencies
' '.join(bad_files)
gyp.input.CircularException: Some files not reachable, cycle in .gyp file depend
ency graph detected involving some or all of: src\client\windows\handler\excepti
on_handler.gyp src\client\windows\tests\crash_generation_app\crash_generation_ap
p.gyp src\client\windows\breakpad_client.gyp src\client\windows\sender\crash_rep
ort_sender.gyp src\client\windows\unittests\client_tests.gyp src\client\windows\
crash_generation\crash_generation.gyp

2、运行之后在 src\client\windows目录下会生成一个solution,开打solution,F7生成。

注意:Debug版生成的时候一切正常,但切换到Release版本之后,生成的时候会遇到一个错误:

>------ 已启动生成: 项目: crash_generation_server, 配置: Release Win32 ------
>生成启动时间为 // ::。
>生成启动时间为 // ::。
>InitializeBuildStatus:
> 正在创建“D:\google_breakpad\src\client\windows\Release\obj\crash_generation_server\crash_generation_server.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
>InitializeBuildStatus:
> 正在创建“D:\google_breakpad\src\client\windows\Release\obj\common\common.unsuccessfulbuild”,因为已指定“AlwaysCreate”。
>ClCompile:
> client_info.cc
> minidump_generator.cc
> crash_generation_server.cc
>crash_generation_server.cc(): error C2220: 警告被视为错误 - 没有生成“object”文件
>crash_generation_server.cc(): warning C4189: “error_code”: 局部变量已初始化但不引用
>crash_generation_server.cc(): warning C4189: “error_code”: 局部变量已初始化但不引用
>crash_generation_server.cc(): warning C4189: “error_code”: 局部变量已初始化但不引用
>ClCompile:
> http_upload.cc
> guid_string.cc
> string_utils.cc
>Lib:
> gtest.vcxproj -> D:\google_breakpad\src\client\windows\Release\lib\gtest.lib
>FinalizeBuildStatus:
> 正在删除文件“D:\google_breakpad\src\client\windows\Release\obj\gtest\gtest.unsuccessfulbuild”。
> 正在对“D:\google_breakpad\src\client\windows\Release\obj\gtest\gtest.lastbuildstate”执行 Touch 任务。
>
>生成成功。
>
>已用时间 ::18.07
>
>生成失败。

原因是错误被视为警告的选项,在Release模式下编译的时候增加了NDEBUG选项,导致了assert被关掉了,所以error_code没有被其他地方引用到,所以编译器发出警告。

然后又被视为错误,所以导致crash_generation_server工程编译失败。

void CrashGenerationServer::HandleReadingState() {
assert(server_state_ == IPC_SERVER_STATE_READING); DWORD bytes_count = ;
bool success = GetOverlappedResult(pipe_,
&overlapped_,
&bytes_count,
FALSE) != FALSE;
DWORD error_code = success ? ERROR_SUCCESS : GetLastError(); if (success && bytes_count == sizeof(ProtocolMessage)) {
EnterStateImmediately(IPC_SERVER_STATE_READ_DONE);
} else {
// We should never get an I/O incomplete since we should not execute this
// unless the Read has finished and the overlapped event is signaled. If
// we do get INCOMPLETE, we have a bug in our code.
assert(error_code != ERROR_IO_INCOMPLETE); EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
}
}

最简单的解决方法是在下图的这个地方添加4189的警告。

Google Breakpad part 1 : Getting Started With Windows Client

然后重新生成,问题解决。

这次就先介绍到这里,下次介绍一下breakpad的使用。

Google Breakpad part 1 : Getting Started With Windows Client的更多相关文章

  1. Google Breakpad 完全解析(二) —— Windows前台实现篇

    原创文章,转载请标明出处:Soul Apogee (http://bigasp.com),谢谢. 好,看完了如何使用breakpad,我们现在看看breakpad在Windows下到底是如何实现的呢? ...

  2. Google Breakpad 完全解析(一) —— Windows入门篇

    原创文章,转载请标明出处:Soul Apogee (http://bigasp.com),谢谢. Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Lin ...

  3. C&plus;&plus;库(Google Breakpad)

    Google Breakpad是什么? 一个开源的多平台崩溃报告系统. Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,它支持Windows,Linux和Mac和Solari ...

  4. google breakpad for linux&lpar;2&rpar;

    breakpad 是什么 breakpad 是一个包含了一系列库文件和工具的开源工具包,使用它可以帮助我们在程序崩溃后进行一系列的后续处理,如现场的保存(core dump),及事后分析(重建 cal ...

  5. Google Breakpad 之一,跨平台crash 处理上报系统简介

    Google Breakpad 之一,跨平台crash 处理上报系统简介 http://blog.csdn.net/wpc320/article/details/8290501 Google Brea ...

  6. Google Breakpad&colon; 实战crash &period;

    Google Breakpad: 实战crash . http://blog.csdn.net/zm_21/article/details/24795205 C/C++程序最棘手的时候就是一个字“挂” ...

  7. google breakpad 使用初步总结

    项目地址:https://code.google.com/p/google-breakpad/    访问不了请挂VPN 这是一个由google主导的开源项目,官方介绍为:An open-source ...

  8. Google Breakpad &&num;183&semi; 基础介绍

    Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合. 三个主要组件 ◆ client 以library的形式内置在你的应用中,当崩溃发生时写 minidump文件 ◆ symbo ...

  9. Android使用google breakpad捕获分析native cash

    Android 开发高手课 课后练习(1) 一.Chapter01 崩溃 https://time.geekbang.org/column/article/70602 https://github.c ...

随机推荐

  1. linux 下向github上传代码

    上传代码: cd TPS/devices/M8 git init                      #//初始化 git add .                    #如果是.表示上传全 ...

  2. VTK初学一,vtkDelaunay2D创建球冠曲面

    #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRend ...

  3. Silverlight无法启动调试,错误&OpenCurlyDoubleQuote;Unable to start debugging&period; The Silverlight Developer Runtime is not installed&period; Please install a matching version&period;” 解决办法

    今天调试Silverlight出现了以下错误: 意思是“无法启动调试,因为Silverlight Developer Runtime没有安装,请安装一个匹配的版本”.但是按Ctrl + F5可以调试运 ...

  4. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  5. mybatis 语句共享

    在mybatis mapping文件中,有些情况下有些语句需要共享给其他sql语句使用. 在网上搜了一下没有结果. 自己动手做了一个单元测试. 示例如下: 比如我在sysuser.xml 中有如下语句 ...

  6. 利用curl抓取远程页面内容

    最基本的操作如下 $curlPost = 'a=1&b=2';//模拟POST数据$cookie_file    =    tempnam('./temp','kie');//可选,保存ses ...

  7. Hibernate SQL方言 &lpar;hibernate&period;dialect&rpar;

    数据库 hibernate方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect ...

  8. Linux下文件及目录的一些操作(附递归遍历目录源码)

    1.获取当前工作目录 #include <unistd.h> 1.char *getcwd(char *buf,size_t size); 2. 3.其中,buf为缓冲区地址,size为给 ...

  9. Merge使用

    Role r = new Role(); r.setName("TEST"); r.setDescription("123"); r.setLevel(2); ...

  10. Anaconda安装及配置

    简介 Anaconda(官方网站)指的是一个开源的Python发行版本,可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本.Anaconda包含了conda.Python在内的超过18 ...