GDB 回溯不显示函数名称

Fra*_*See 5 gdb function names backtrace

我在 SunOS 5.10 上编译了我的库(特别是protbuf-2.3.0) 。-g -O0

make 日志中的示例行如下:

/bin/bash ../libtool --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..    -D_REENTRANT -pthreads -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare  -g -O0 -MT text_format.lo -MD -MP -MF .deps/text_format.Tpo -c -o text_format.lo `test -f 'google/protobuf/text_format.cc' || echo './'`google/protobuf/text_format.cc
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -D_REENTRANT -pthreads -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -g -O0 -MT text_format.lo -MD -MP -MF .deps/text_format.Tpo -c google/protobuf/text_format.cc  -fPIC -DPIC -o .libs/text_format.o
Run Code Online (Sandbox Code Playgroud)

然后,我使用以下步骤附加了我的 gdb:

  1. 运行我的应用程序(在本例中,我的 Web 服务器启动一个 Java Web 应用程序,该应用程序在启动期间通过 jni 使用库)。
  2. gdb -p XXX我通过(其中 XXX 是我从中获得的 pid )将我的 gdb 连接到该进程ps
  3. 然后我使用file libprotobuf.sogdb 提示符从 gdb 加载我的库。

但我看不到我的函数名称bt。我的 GDB backtrace 命令显示如下:

(gdb) bt 
#0  0xf8f98914 in ?? ()
#1  0xf8f98830 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Run Code Online (Sandbox Code Playgroud)

我还尝试仅执行 #1 & #2、仅 #1 & #3 以及 #1 & gdb libprotobuf.so -p XXX

除此之外,我还尝试在调试模式下运行 jvm 并在System.loadLibrary(..)命令上添加断点,在单步执行该命令后,我再次执行 gdb 附件过程......但仍然没有任何结果。

但是,我可以在给定函数名称的情况下放置断点,并通过list. 但话又说回来,我可以放置断点,但它们不会在这些函数名称上停止(我知道它会转到该函数,因为每次 jvm 崩溃后它都在 jvm hs_err_pid 报告中)。

有什么想法吗?它没有向我显示我的函数名称?

小智 -3

我认为这是链接问题。您可以检查一下链接时执行的命令吗?希望这会有所帮助。

  • 你的回答是最没有帮助的:检查命令做什么?为什么您认为这与链接有关? (2认同)