即时尝试debugging我写的程序,但GDB告诉我一个错误: 缺less单独的debuginfos,请使用:debuginfo-istall glibc-2.9-2.i686 当即时通讯尝试使用该命令,它给了我一个错误,因为我的Fedora从互联网断开。 不过,我的fedora的光盘里有glibc-2.9-2.i686。 我怎样才能使用debuginfo-install与我的本地文件? 还是有另一种解决办法? 谢谢!
我正在开发一个在Linux上运行的embedded式C ++应用程序。 我最近遇到了一些非常奇怪的性能问题与pthreads。 我的系统有8个线程通过pthread互斥锁保护来回传递信息。 当单独运行我的应用程序时,线程性能在进行互斥锁时非常慢。 locking和解锁互斥约200次,在500MHz的ARM板上需要2.4秒,而在200MHz的板上需要更长的时间。 奇怪的是,当我在GDB下运行我的应用程序时,应用程序运行速度非常快。 当GDB运行时,花费2.4秒的代码块需要大约2ms。 我已经在2个不同的基于ARM的SBC上testing了这种行为:一个运行Linux 2.4.26,使用gcc 3.4.4和glibc 2.3.2,另一个运行Linux 2.6.21,使用gcc 3.4.4和glibc 2.3.2 。 经过广泛的testing后,我怀疑问题出在pthreads库,这两个板子的工具链上恰好是相同的版本。 这将是不幸的,因为我的SBC供应商不提供各种各样的工具链,我怕他们都会遇到这个问题。 有没有人有任何洞察什么可能会造成不良的performance,而不是在GDB下运行?
gdb说明如下。 警告:在multithreading程序中,软件观察点只有有限的用处。 如果gdb创build一个软件观察点,它只能在单个线程中观察expression式的值。 如果您确信expression式只能由于当前线程的活动而改变(如果您还确信没有其他线程可以成为最新的),那么您可以照常使用软件观察点。 但是,当非当前线程的活动更改expression式时,gdb可能不会注意到。 (硬件观察点,相反,在所有线程中观察expression式。) 那么,如何使用gdb使用多个线程的观察点,使得gdb可以从任何线程切换到监视的variables?
#include <iostream> using namespace std; class dummyA { int x; public: dummyA () { x = 0; } void test () { x++; } }; int main () { cout << "\nG'Morning"; dummyA obj; obj.test (); return 0; } 回溯输出: (gdb) bt #0 main () at backtrace.cpp:21 (gdb) bt full #0 main () at backtrace.cpp:21 […]
我有一个简单的汇编程序,下面的makefile: all : calc calc : calc.o gcc -m32 -g -o calc calc.o calc.o : calc.s nasm -f elf -g -F stabs calc.s 我尝试使用gdb进行debugging,但总是说: 单步执行,直到退出函数asc2int,没有行号信息。 我尝试了很多解决scheme,包括-F dwarf但没有一个-F dwarf 。 你能帮我解决这个问题吗?
我正在testing一个来自第三方的图书馆,它崩溃了。 当我想查看崩溃的原因时,我的gdb告诉我没有可用的debugging符号 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0xb53ffb70 (LWP 3722)] 0x00172a89 in tsip_transac_send () from /usr/local/lib/libtinySIP.so.0 我在gdb控制台上发布了完整的bt ,并得到了一系列如下所示的行 #0 0x00172a89 in tsip_transac_send () from /usr/local/lib/libtinySIP.so.0 No symbol table info available 在检查Makefile中的CFLAGS之后,我重新编译了这个库。 值始终都很好,但我仍然重新编译它 CFLAGS = -g -O2 我用同样的运气再次运行testing,没有共享库的debugging符号。 我在这里错过了什么? 我使用的是Centos 6.0,而我之前在Opensuse中安装了这个库,但是我没有这个问题。 这可能与我的Centos安装有关。 如果有人在乎,我正在testingDoubango的webrtc2sip库。 编辑:debugging符号正在正确加载 (gdb) info sharedlibrary From To Syms Read Shared […]
我正在debugging使用ddd在远程目标上运行的程序(例如,远程gdbserver通过端口1234在本地主机上运行,但仍然是远程的)。 我知道你可以通过打开ddd连接到gdbserver,然后在ddd的gdb命令行上调用target remote localhost:1234 ,如下所述: http://www.gnu.org/software/ddd/manual/html_mono/ddd.html#Remote%20Program 不过,我讨厌每次打开ddd时都要调用target remote localhost:1234命令,而且我想将其设置为使用别名自动连接到gdbserver。 我试着运行ddd –rhost localhost:1234 program ,但是一旦ddd启动一个窗口popup窗口说明“GDB无法启动”,并在shell中写入: sh:1:exec:localhost:1234:找不到 任何人都知道如何在启动时连接到远程gdbserver? TNX!
默认情况下,GDB的内部variables将是$ 1,$ 2,$ 3,….如何重新命名从$ 1命名? (gdb) p v1 $1 = 7 (gdb) p v2 $2 = 8 (gdb) p v3 $3 = 9 (gdb) ??? // what should be put here? $1 = 0
在CentOS6.6上编程时,我在屏幕会话中运行时删除了一个可执行文件(哎呀, make clean )。 现在,无关,我想要debugging过程来debugging一些东西。 我已经重build了可执行文件,但是gcore不接受被replace的文件。 它知道原始文件被删除,不会让我转储核心。 # gcore 15659 core.YGsoec:4: Error in sourced command file: /home/dev/bin/daemon/destinyd (deleted): No such file or directory. gcore: failed to create core.15659 # ls -l /proc/15659/exe lrwxrwxrwx. 1 root root 0 Mar 12 21:33 /proc/15659/exe -> /home/dev/bin/daemon/destinyd (deleted) # ln -s /proc/15659/exe /home/dev/bin/daemon/destinyd ln: creating symbolic link `/home/dev/bin/daemon/destinyd': File […]
我经常使用GDB来debuggingC / C ++程序,而且我对它的工作原理以及它可以做的事情有相当的了解。 然而,每当我经常遇到一些神秘的问题时,我似乎无法让GDB从核心文件中正确加载符号。 目前,我在共享的NFS目录中有一个二进制可执行文件。 可执行文件肯定是用-g3标志编译的。 该可执行文件崩溃并将一个核心文件转储到我的Linux机器的/ home目录中。 出于某种原因,我无法从GDB加载核心文件中的符号。 当我尝试: $ gdb <executable_file> <core_file> GDB加载,但我不能得到一个回溯,没有debugging符号加载。 如果我运行GDB,然后在GDB提示符下键入core <core file name>它加载核心文件,我看到核心文件肯定与之前崩溃的二进制可执行文件相关联。 但是,GDB报告`无法从内存中读取有效的目标文件映像',所以我无法获得有意义的回溯,也没有加载debugging符号。 有谁知道这可能是什么原因? 通常我可以毫无困难地让GDB正确加载一个核心文件并读取debugging符号,但在这种情况下它不起作用。 这是否是因为二进制可执行文件存储在共享的NFS挂载?