我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?
我多年来一直在使用各种 xunit 测试(从 2000 年代初的 cppunit 开始)。在所有情况下,在失败时设置断点都很容易:有一个函数指示检测到的失败:
b 'atf::tests::tc::fail(std::string const&)' 命令向上 1 结束
看起来 gtest 是相当不同的,对 gtest 做同样的事情的既定做法是什么?
这是一个相当简单的应用程序的设置,我无法正确链接.基本上是单个源文件main.cpp,带有静态库的目录libbreakpad_client.a,以及库中的标头breakpad.
$ ls .
main.cpp libs breakpad
$ ls libs
libbreakpad_client.a
Run Code Online (Sandbox Code Playgroud)
以下是Google Breakpad文档中main.cpp逐字记录的来源.
#include "client/linux/handler/exception_handler.h"
void crash()
{
volatile int* a = (int*)(NULL);
*a = 1;
}
static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded)
{
printf("Dump path: %s\n", descriptor.path());
return succeeded;
}
int main()
{
google_breakpad::MinidumpDescriptor descriptor("/tmp");
google_breakpad::ExceptionHandler eh(descriptor, 0, dumpCallback, 0, true, -1);
crash();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,链接器抱怨它无法找到ExceptionHandler构造函数和析构函数.
$ g++ -Ibreakpad/src -lbreakpad_client -Llibs -o main main.cpp …Run Code Online (Sandbox Code Playgroud)