我正在尝试调试在调试环境中编译的 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/