c++ - os x 优胜美地上的 gdb 在程序异常时不显示文件名和行号

标签 c++ macos gdb rethinkdb

我正在尝试调试在调试环境中编译的 rethinkdb 二进制文件。自从我第一次使用 gdb 以来,我无法弄清楚为什么文件名和行号在模拟崩溃后没有出现。已尝试将“-fstandalone-debug -gdwarf-4 -g -pthread --verify-debug-info”放入 CXXFLAGS 但 gdb 崩溃后的输出仍然如下

   1 [0x1012741c0]: 0   rethinkdb                           0x00000001012741c0 _Z19rethinkdb_backtracePPvi + 272 at 0x1012741c0 ()
   2 [0x1000d0950]: 0   rethinkdb                           0x00000001000d0950 _ZN11backtrace_tC2Ev + 304 at 0x1000d0950 ()
   3 [0x1000d279b]: 0   rethinkdb                           0x00000001000d279b _ZN26lazy_backtrace_formatter_tC2Ev + 43 at 0x1000d279b ()
   4 [0x1000cf815]: 0   rethinkdb                           0x00000001000cf815 _ZN26lazy_backtrace_formatter_tC1Ev + 21 at 0x1000cf815 ()
   5 [0x1000cf780]: 0   rethinkdb                           0x00000001000cf780 _Z16format_backtraceb + 48 at 0x1000cf780 ()
   6 [0x100b3a73d]: 0   rethinkdb                           0x0000000100b3a73d _Z18report_fatal_errorPKciS0_z + 733 at 0x100b3a73d ()
   7 [0x100f8b625]: 0   rethinkdb                           0x0000000100f8b625 _Z9serializeIL17cluster_version_t7EEvP15write_message_t19conflict_behavior_t + 85 at 0x100f8b625 ()
   8 [0x100f834f1]: 0   rethinkdb                           0x0000000100f834f1 _Z9serializeIL17cluster_version_t7EEvP15write_message_tRK16batched_insert_t + 65 at 0x100f834f1 ()
   9 [0x101027b0a]: 0   rethinkdb                           0x0000000101027b0a _ZN20variant_serializer_tIL17cluster_version_t7ELi2EJ16batched_insert_t13point_write_t14point_delete_t6sync_t13dummy_write_tEEclERKS1_ + 58 at 0x101027b0a ()

配置输出如下

Bash:                           3.2.57(1)-release
CXXFLAGS:                       -g
Use ccache:                     no
C++ Compiler:                   CLANG 7.0.0 (/usr/bin/c++)
Host System:                    x86_64-apple-darwin14.5.0
Build System:                   Darwin 14.5.0 x86_64
Cross-compiling:                no
Host Operating System:          Darwin
Build Architecture:             x86_64
stdlib:                         -lc++
C++11:                          ok
Precompiled web assets:         no
Protobuf compiler:              /usr/local/bin/protoc
python:                         python 2.7.10
Node.js package manager:        ~/.nvm/versions/node/v4.2.1/bin/npm
coffee:                         coffee 1.10.0
Browserify:                     browserify 12.0.1
bluebird:                       external/bluebird_2.9.32
web UI dependencies:            external/admin-deps_2.0.3
wget:                           /usr/local/bin/wget
curl:                           /usr/bin/curl
Google Test:                    external/gtest_1.7.0
termcap:                        -ltermcap
boost_system:                   -lboost_system
ssl:                            -lssl
protobuf:                       -lprotobuf
v8 javascript engine:           external/v8_3.30.33.16
RE2:                            external/re2_20140111
z:                              -lz
crypto:                         -lcrypto
curl:                           -lcurl
malloc:                         system
Test protobuf:                  ok
Test boost:                     ok
Test OpenSSL:                   ok
Installation prefix:            /usr/local
Configuration prefix:           /usr/local/etc
Runtime data prefix:            /usr/local/var

感谢帮助!!

最佳答案

在@atnnn 的帮助下解决了这个问题。基本上崩溃发生在其中一个线程中,这就是文件名和行号格式为 at 0x1000d279b () 的原因。将 break report_fatal_error 添加到 gdb 得到以下输出

[Switching to Thread 0x1203 of process 60882]
Breakpoint 1, report_fatal_error (file=0x101df0171 "./src/protocol_api.hpp", line=109, msg=0x101e02f04 "Assertion failed: [u.v >= int8_t( conflict_behavior_t::ERROR) && u.v <= int8_t( conflict_behavior_t::UPDATE)] ") at src/errors.cc:59
59 fprintf(stderr, "Version: %s\n", RETHINKDB_VERSION_STR);

关于c++ - os x 优胜美地上的 gdb 在程序异常时不显示文件名和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972181/

相关文章:

c++ - Eclipse CDT 从头文件生成方法 stub ?

c++ - 生成随机数对以形成二维随机点

c++ - CMake 没有生成 Make 文件

python - 任何已知的方法来创 build 备到设备的可移植独立Python运行时?

c++ - 附加标准字符串时出现 bad_alloc 异常

C++ : First User Input Prompt Is Skipped

macos - 是否可以将 Google Chrome Canary 设置为 OS X Yosemite 上的默认浏览器?

gdb - Shellcode在gdb中提供SyntaxError

使用 cygwin 进行 gdb 输入重定向

c - 从调试符号获取变量的堆栈偏移量