当我使用-g编译程序并获得核心转储时,我可以使用gdb读取可执行文件和核心转储以调试程序在崩溃前遇到的情况。特点之一gdb优惠是list选项,可以列出使用可执行文件和核心转储编译的源代码。我用了strings-a使用可执行文件和核心转储,我什至找不到一个if或for语句,而我确定代码中有很多语句。那么代码是从哪里来的呢?我在一台计算机上编译代码并在另一台计算机上运行它,因此生成核心转储的计算机上没有源代码,而且它似乎不在可执行文件或核心转储中。有什么建议么?我真的很想打印可执行文件和核心转储中的所有源代码,这可能吗?我的意思是不运行gdb,我确信可以编写一个使用gdb的脚本并且可以列出
我想使用gdb调试python脚本。启动gdb后,输出:[root@localhostscripts]#gdbpythonGNUgdb(GDB)RedHatEnterpriseLinux7.6.1-51.el7Copyright(C)2013FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopyi
我想使用gdb调试python脚本。启动gdb后,输出:[root@localhostscripts]#gdbpythonGNUgdb(GDB)RedHatEnterpriseLinux7.6.1-51.el7Copyright(C)2013FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopyi
我有一个多线程C++程序,在极少数情况下会死锁。这个问题很难重现,我只能在远程机器上重现。我想用来解决这个问题的方法是运行程序等待死锁向其发送中止信号以生成核心转储将转储复制回我的本地机器使用gdb调试我在远程机器上没有gdb,无法在上面安装任何东西。问题是当我调试核心转储(从远程机器上的死锁或正常运行的进程获得)时,大多数线程的回溯仅显示:(gdb)bt#0pthread_cond_wait()at../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:261#10x0000000000000000in??()我正在使用一
我有一个多线程C++程序,在极少数情况下会死锁。这个问题很难重现,我只能在远程机器上重现。我想用来解决这个问题的方法是运行程序等待死锁向其发送中止信号以生成核心转储将转储复制回我的本地机器使用gdb调试我在远程机器上没有gdb,无法在上面安装任何东西。问题是当我调试核心转储(从远程机器上的死锁或正常运行的进程获得)时,大多数线程的回溯仅显示:(gdb)bt#0pthread_cond_wait()at../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:261#10x0000000000000000in??()我正在使用一
我正在UbuntuLinux上开发一个项目,当我使用GDB调试应用程序并按CTRL+Z中断时,我按预期得到SIGTSTP和GDB中断。但是当我在那之后使用cont时,我仍然得到SIGTSTP,我重复cont很多次,但接缝只是行为相同,只是反复给我SIGTSTP。以下两个调用栈交替重复:Thecallstackisasfollowingalterativly:ProgramreceivedsignalSIGTSTP,Stopped(user).[SwitchingtoThread0x7fffef73d700(LWP32591)]0x00007ffff636dffdinread()from
我正在UbuntuLinux上开发一个项目,当我使用GDB调试应用程序并按CTRL+Z中断时,我按预期得到SIGTSTP和GDB中断。但是当我在那之后使用cont时,我仍然得到SIGTSTP,我重复cont很多次,但接缝只是行为相同,只是反复给我SIGTSTP。以下两个调用栈交替重复:Thecallstackisasfollowingalterativly:ProgramreceivedsignalSIGTSTP,Stopped(user).[SwitchingtoThread0x7fffef73d700(LWP32591)]0x00007ffff636dffdinread()from
我已经成功地使用了一段时间的gdb,但是我最近升级了我的Ubuntu版本,现在看来我只有以root身份运行才能让gdb成功运行我的程序。也就是说,~%gdb-qsleep-ex'run60'Readingsymbolsfrom/bin/sleep...(nodebuggingsymbolsfound)...done.Startingprogram:/bin/sleep60tcsh:Permissiondenied.Duringstartupprogramexitedwithcode1.(gdb)失败,而~%sudogdb-qsleep-ex'run60'Readingsymbolsfr
我已经成功地使用了一段时间的gdb,但是我最近升级了我的Ubuntu版本,现在看来我只有以root身份运行才能让gdb成功运行我的程序。也就是说,~%gdb-qsleep-ex'run60'Readingsymbolsfrom/bin/sleep...(nodebuggingsymbolsfound)...done.Startingprogram:/bin/sleep60tcsh:Permissiondenied.Duringstartupprogramexitedwithcode1.(gdb)失败,而~%sudogdb-qsleep-ex'run60'Readingsymbolsfr
今天在linux上调试代码时,突然发现gdb中的函数地址和nm显示的不一样。(可执行文件是静态链接的。)我认为它们显示的地址应该是相同的,因为它们都是逻辑地址。但今天的发现让我感到困惑。有人知道他们不同的原因吗?我写了下面这个简单的程序来说明我遇到的情况。voidfo(){return;}voidfoo(){fo();}intadd(inta,intb){foo();returna+b;}intmain(){inta=1;intb=2;add(a,b);return0;}nm的输出是:0000000000400584T_Z2fov0000000000400595T_Z3addii000