我通过将此行添加到以下内容为GDB提示设置了颜色~/.gdbinit:
set prompt \033[0;32m(gdb) \033[0m
Run Code Online (Sandbox Code Playgroud)
这在GDB中工作正常,直到我打开TUI.然后丢弃颜色并显示原始颜色代码.如果我使用CGDB,也会发生同样的事情.
这是2015年.有没有什么方法可以在GDB中同时使用这两种颜色,还可以查看我在终端的子窗口(如TUI/CGDB)中调试的源代码?
我刚刚gdb 7.8在运行linux的服务器机器上从我的主目录中的源代码编译.我以前一直在使用gdb 7.6,除了gdb自身的稳定性问题(升级的原因)一切正常.
自升级以来gdb,当我运行时,cgdb 0.6.7我立即得到以下消息:
Run Code Online (Sandbox Code Playgroud)Python Exception <type 'exceptions.ImportError'> No module named gdb: warning: Could not load the Python gdb module from `/home/username/bin/gdb//python'. Limited Python support is available from the _gdb module. Suggest passing --data-directory=/path/to/gdb/data-directory.
当我建造时gdb,我使用了./configure --with-python.
当我运行cgdb并且我的程序达到段错误时,我输入backtrace并获得以下消息:
Python例外没有名为gdb.frames的模块:
所以看起来我实际上无法使用gdb/ cgdb没有python支持.我该怎么做才能解决这个问题?
FWIW; 我不用python,我经常写c++.
我找不到cgdb反汇编二进制文件的方法,并在代码窗口中显示当前指令的汇编代码.这是可能的,我应该使用什么命令?我正在使用Mac OS X并从自制软件库获取cgdb.
我写了这段无辜的代码,导致了这样一个邪恶的错误:
static char * prefixed( char * pref, char *str ) {
size_t newalloc_size = sizeof(char) * (strlen(pref) + strlen(str));
char * result = (char*) malloc( newalloc_size );
[...]
Run Code Online (Sandbox Code Playgroud)
debug(cgdb)的输出:
Breakpoint 1, prefixed (pref=0x401345 "Env: ", str=0x4012b5 "Home") at ./src/backend/os/env.c:77
(gdb) s
(gdb) p newalloc_size
$1 = 9
(gdb) s
envtest: malloc.c:2368: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >=
(unsigned long)((((__builtin_offsetof …Run Code Online (Sandbox Code Playgroud) 我可以通过在GDB中放置一个断点,然后按c继续执行,来执行GDB中的特定行。
b <line_number> ; insert breakpoint
c ; run up to the breakpoint
del <breakpoint_number> ; remove breakpoint
Run Code Online (Sandbox Code Playgroud)
是否有命令可以运行到特定的行号,从而避免了必须运行上述命令序列?
当我set logging on在gdb中使用时,日志文件的输出格式与我在终端屏幕上看到的格式不同.日志文件不是很易读.如何以可读格式获取日志文件?
输出到屏幕很好:
(gdb) p foo
$1 = {
static npos = 18446744073709551615,
_M_dataplus = {
<std::allocator<char>> = {
<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
members of std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider:
_M_p = 0x601028 "Hello World!\n"
}
}
Run Code Online (Sandbox Code Playgroud)
输出到日志文件的可读性不高:
^Z^Zpost-prompt
^Z^Zbreakpoints-headers
^Z^Zfield 0
Num
^Z^Zfield 1
Type
^Z^Zfield 2
Disp
^Z^Zfield 3
Enb
^Z^Zfield 4
Address
^Z^Zfield 5
What
^Z^Zbreakpoints-table
^Z^Zrecord
^Z^Zfield 0
1
^Z^Zfield 1
breakpoint
^Z^Zfield 2
keep
^Z^Zfield 3
y
^Z^Zfield 4
0x0000000000400961
^Z^Zfield …Run Code Online (Sandbox Code Playgroud) 我有一个C++应用程序,它通过USB串行链路连接到微处理器(类似于Arduino).我termios.h用作我的串行包装器.
我cgdb在Mac OS X上调试使用10.7.3.
当我:
cgdb build/my-processkillcgdb这个过程挂了.cgdb拒绝杀死这个过程 - 只是坐在那里.我相当肯定,这是因为如果我kill从半途应用,我从来没有放开/dev/ttyUSB我通过访问微控制器设备.我不确定某些东西是否被锁定并且从未解锁,但cgdb永远不会退出.
我试过了:
ps aux | grep 'my-process',kill -9 [pid]`. ps aux | grep cgdb,kill -9 [pid].sudo 以上版本. 没有任何东西杀死它cgdb或在其中运行的进程.
如果我移除USB电缆(终止与微处理器的连接),(我认为可能会崩溃崩溃的过程),我开始看到~50%的可用CPU被使用(不确定是什么),一切都锁定了.我没有设法让应用程序崩溃.
你怎么了:(一)退出干净而不从上锁定一切cgdb或gdb同时在调试过程中,或(b)杀/干净(虽然"干净"将只是锦上添花)停止也停掉的,而一个过程你正在调试它没有重新启动时没有响应?kill -9