【问题标题】:GDB: stepping into a libraryGDB:走进图书馆
【发布时间】:2014-01-30 11:29:06
【问题描述】:

运行我的应用程序时出现分段错误。我运行 gdb 来检查我的代码在哪里失败,但我得到以下输出:

Program received signal SIGSEGV, Segmentation fault.
0x39ca8000 in ?? ()
(gdb) bt
#0  0x39ca8000 in ?? ()
#1  0xb7d5df9a in sc_core::sc_port_base::complete_binding() () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#2  0xb7d5e104 in sc_core::sc_port_registry::complete_binding() () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#3  0xb7d5e13e in sc_core::sc_port_registry::elaboration_done() () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#4  0xb7dc669d in sc_core::sc_simcontext::elaborate() () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#5  0xb7dc8567 in sc_core::sc_simcontext::initialize(bool) () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#6  0xb7dc8b19 in sc_core::sc_simcontext::simulate(sc_core::sc_time const&) () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#7  0xb7dc9708 in sc_core::sc_start(sc_core::sc_time const&) () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#8  0x080555a8 in sc_core::sc_start (duration=40000, time_unit=sc_core::SC_MS) at /opt/systemc-2.2-rel/include/sysc/kernel/sc_simcontext.h:608
#9  0x08055119 in sc_main (argc=1, argv=0xbffff524) at module_pfn.cpp:49
#10 0xb7dbc698 in sc_elab_and_sim () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#11 0xb7d522e7 in main () from /opt/systemc-2.2-rel/lib/libsystemc.so.2.2
#12 0xb7a2e4d3 in __libc_start_main () from /lib/i386-linux-gnu/libc.so.6
#13 0x08054da1 in _start ()

如您所见,一切都来自一个库,除了“main”调用和“start”,我在其中设置了断点,但它们在那里立即失败。我的意思是:

#8  0x080555a8 in sc_core::sc_start (duration=40000, time_unit=sc_core::SC_MS) at /opt/systemc-2.2-rel/include/sysc/kernel/sc_simcontext.h:608
#9  0x08055119 in sc_main (argc=1, argv=0xbffff524) at module_pfn.cpp:49
...
(gdb) br /opt/systemc-2.2-rel/include/sysc/kernel/sc_simcontext.h:608
Breakpoint 2 at 0x8055584: file /opt/systemc-2.2-rel/include/sysc/kernel/sc_simcontext.h, line 608.
(gdb) r
Starting program: /home/guest/Solutions/eln/systemc-ams/module_pfn 
...
Breakpoint 2, sc_core::sc_start (duration=40000, time_unit=sc_core::SC_MS) at /opt/systemc-2.2-rel/include/sysc/kernel/sc_simcontext.h:608
608     sc_start( sc_time( duration, time_unit ) );
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x39ca8000 in ?? ()

我们回到起点。

我无法理解失败的地方。我看到这是失败的地方的名称:sc_core::sc_port_base::complete_binding(),我可以访问可以找到此函数的cpp,但只能在源文件(而不是库)中。问题是我真的很想一步一步地看那个代码,有可能吗?

谢谢:)

【问题讨论】:

  • 调试构建还是优化构建??
  • 注意:问题可能在您的代码中,而不是在库中。
  • @DumbCoder 可能是优化的构建。如果我能得到一个“调试版本”,我会试试。这取决于编译对吗?有这样的选择吗?
  • 如果你提供了一个无效的指向 printf 的指针,它会在 printf 中崩溃。这仍然是你的错,不是图书馆的错。
  • 确保该库是使用与您拥有的源链接的调试信息进行编译的。

标签: c++ debugging gdb segmentation-fault systemc


【解决方案1】:

谢谢大家!

我使用了一个带有调试信息的库,现在我可以浏览库代码了。

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 2016-02-05
    • 1970-01-01
    • 2022-07-20
    • 2015-05-27
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多