我只是在gdb中debugging一个程序,不知何故,我发现了一个我从未见过甚至听说过的新function,除了提供命令外,还可以看到和浏览代码: 这是什么? 我做了什么,或者更具体地说,我怎样才能再次获得这个分屏模式? 有没有这个模式的名称,或者我可以阅读有关如何使用它的地方?
在linux下,我可以使用GDB来debugging当前正在运行的进程吗?
是否有可能在gdb中检查函数的返回值,假定返回值没有分配给variables?
我正在尝试使用–command标志自动化gdb会话。 我试图设置一个共享库中的函数的断点(一个DLL的Unix等价物)。 我的cmds.gdb如下所示: set args /home/shlomi/conf/bugs/kde/font-break.txt b IA__FcFontMatch r 但是,我收到以下内容: shlomi:〜/ progs / bugs-external / kde / font-breaking $ gdb –command = cmds.gdb … GNU gdb 6.8-2mdv2009.0(Mandriva Linux release 2009.0) Copyright(C)2008 Free Software Foundation,Inc. 许可证GPLv3 +:GNU GPL版本3或更高版本 这是免费软件:您可以自由更改和重新分配它。 没有担保,在法律允许的范围内。 键入“显示复制” 和“显示保修”的细节。 这个GDB被configuration为“i586-mandriva-linux-gnu”… (没有finddebugging符号) 未定义函数“IA__FcFontMatch”。 在将来的共享库加载时使断点处于等待状态? (y或[n])[回答N; 不是从terminalinput] 所以它毕竟不设置断点。 我怎样才能让它默认回答“y”设置断点未来的共享库负载? 我记得我能做些事情,但不记得是什么。
假设有这样的事情: #include <map> int main(){ std::map<int,int> m; m[1] = 2; m[2] = 4; return 0; } 我希望能够从gdb中检查运行该程序的地图的内容。 如果我尝试使用下标运算符,我会得到: (gdb) pm[1] Attempt to take address of value not located in memory. 使用find方法不会产生更好的结果: (gdb) p m.find(1) Cannot evaluate function — may be inlined 有没有办法做到这一点?
任何人都可以解释gdb的这种行为? 900 memset(&new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node->offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node->offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) 913 […]
我怎样才能在C或C ++代码中设置一个断点,这对Linux上的gdb有效? 即: int main(int argc, char** argv) { /* set breakpoint here! */ int a = 3; a++; /* In gdb> print a; expect result to be 3 */ return 0; }
我正在开发一个multithreading应用程序,我想用GDB进行debugging。 问题是,我的一个线程不断死讯: pure virtual method called terminate called without an active exception Abort 我知道这个消息的原因,但我不知道我的线程在哪里发生。 回溯真的会有所帮助。 当我在GDB中运行我的应用程序时,每次线程暂停或恢复时都会暂停。 我希望我的应用程序能够继续正常运行,直到其中一个线程死亡,此时,所有事情都应该停止,以便我可以回溯。
我可以在gdb中添加一个断点: b <filename>:<line no> 如何删除特定位置的现有断点?
我有以下堆栈跟踪。 是否有可能做出任何有用的debugging? Program received signal SIGSEGV, Segmentation fault. 0x00000002 in ?? () (gdb) bt #0 0x00000002 in ?? () #1 0x00000001 in ?? () #2 0xbffff284 in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) (gdb) 在出现Segmentation fault时,从哪里开始查看代码,并且堆栈跟踪没有那么有用? 注意:如果我发布代码,那么SO专家会给我答案。 我想从SO的指导中find答案,所以我不在这里发布代码。 道歉。