trivial 和 POD 类型

POD 类型 (Plain Old Data) POD 类型也就是传统 C 类型,脱离或不使用 OOP 的特征。 POD 多用于类和结构体,拥有以下特性: 允许通过直接内存操作进行构造或析构。 兼容 C。 保证静态初始化有效,可以放入 .bss 段。 trivial or non-trivial 对于类的四种函数,有 trivial (平凡)和 non-trivial (非平凡)的概念。 构造函数 (ctor) 拷贝构造函数 (copy) 赋值函数 (assignment) 析构函数 (dtor) 如果满足以下条件之一: 显示定义了上诉四种函数之一 类内存在非 POD 成员 有基类 那么上述四种函数为 non-trival 函数。 参考

October 30, 2021 · 1 min · lyincc

一次 CEF 崩溃排查

崩溃信息 dump 原始堆栈 WARNING: Continuing a non-continuable exception (2978.5e4): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=00b5f130 ebx=0b746000 ecx=00000000 edx=00b5f278 esi=0b746000 edi=00b5f220 eip=116b5c90 esp=00b5f0b8 ebp=00b5f0d8 iopl=0 nv up ei pl nz na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206 libcef!ui::Compositor::SetScaleAndSize+0xe: 116b5c90 f30f1089c4000000 movss xmm1,dword ptr [ecx+0C4h] ds:002b:000000c4=???????? 0:000> k # ChildEBP RetAddr 00 00b5f0d8 116b48a3 libcef!...

July 31, 2021 · 2 min · lyincc

boost 使用

编译 boost 支持使用 bjam.exe 或 b2.exe 编译。b2 是 bjam 的升级版本。所以推荐使用 b2。 目前 boost 库中可以看到 CMakeLists.txt 文件,说明官方也在支持 CMake 编译,但官方表示 CMake 编译支持还在开发中,还不能使用。 .\bootstrap.bat 先使用初始脚本编译构建工具。 .\b2 install --toolset=msvc-15.0 --prefix="E:\library\cpp\msvc-15.0_x86_Release\boost" link=static runtime-link=shared threading=multi address-model=32 release 编译 32 位静态库。 在 CMake 中使用 find_package 导入 boost 在项目 CMake 工程文件中增加 SET(Boost_ADDITIONAL_VERSIONS "1.76" "1.76.0")SET(BOOST_ROOT "E:/library/cpp/msvc-15.0_x86_Release/boost")SET(BOOST_USE_STATIC_LIBS ON)SET(BOOST_USE_MULTITHREADING ON)SET(BOOST_USE_STATIC_RUNTIME OFF)find_package(Boost "1.76.0" COMPONENTS interprecess REQUIRED)if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(progname ${Boost_LIBRARIES})endif()

April 16, 2021 · 1 min · lyincc

CMake 使用

命令行 生成 mkdir build cd build cmake .. -G "Visual Studio 15 2019" -A Win32 在 build 文件夹中创建 CMake 工程。建议对所有工程都这样采用独立目录建立工程,这样方便删除工程,不易污染源文件。 不能重复执行,如果需要重建工程需要删除这个目录。 cmake . 构建 在一个已经创建的 cmake 工程中执行,可以更新该工程。 编译工程,指定配置。 cmake --build . --config Release 开启并行编译 cmake --build . -j8 安装 安装工程,可以指定安装目录。 cmake --install . --config Release --prefix "E:/library/cmake/OpenSSL" CMAKE 变量 CMAKE_PREFIX_PATH 搜索路径。 CMAKE_MODULE_PATH 模块搜索路径。 CMAKE_CURRENT_LIST_DIR 当前 CMakeLists.txt 文件目录 CMAKE_CURRENT_BINARY_DIR 当前输出目录 CMAKE_COMMAND cmake 执行文件路径 指令 命令行输出 message("Output.")源文件编码 在 VS2017 以上版本,可以指定编译参数使用 UTF-8 编码...

April 15, 2021 · 1 min · lyincc

Chromium 工程编译

调试 Chromium 在 out\Debug_* 目录下会自动生成 cef.sln 工程文件,用 VS 打开后即可附加调试 命令行参数 --log-level=1 # 日志输出等级 INFO = 0, WARNING = 1, LOG_ERROR = 2, LOG_FATAL = 3 --log-file # 日志文件 --enable-logging=stderr # 重定向日志到标准错误输出 对于 VERBOSE 等级日志,需要专门指定模块等级。参考 base/logging.h --vmodule=profile=2,icon_loader=1,browser_*=3,*/chromeos/*=4 # 模块日志等级 编译 Chromium 参考 chromium 官方文档 https://www.chromium.org/developers/how-tos/get-the-code depot_tools 环境参数 rem 禁止更新 set DEPOT_TOOLS_UPDATE=0 rem 使用本地工具链 set DEPOT_TOOLS_WIN_TOOLCHAIN=0 rem python3 有问题,暂时使用 python2 set GCLIENT_PY3=0 rem 不使用 gn 工具 set CEF_USE_GN=0 rem Windows SDK 路径 set WINDOWSSDKDIR=C:\Program Files (x86)\Windows Kits\10 初始化 gclient 工程...

March 26, 2020 · 2 min · lyincc