c - 调试 GTK 事件回调

标签 c debugging gdb gtk

我第一次尝试调试 gtk 代码,实际上,我想调试 key-press-event 的回调函数,因此我使用 gdb< 设置了一个断点 当它到达断点时,整个桌面环境卡住(我在 gnome-shell 下运行),似乎图形环境正在等待事件完成。

我有一些想法,但行不通:

第一次尝试是将一些 gdb 命令分配给断点:

(gdb) break on_key_press_callback
(gdb) commands
      > back trace
      > next
      > next
      > next
      > continue
      > end

但不知道为什么,只执行了back trace命令,然后就卡住了。

第二次尝试是在 tty1 上使用 gdbservergdb 进行远程调试(没有要卡住的图形:))我能够发送断点后的命令如 nextstep 但没有什么可看的(无法列出代码、检查堆栈等...... )

那么有什么好的技巧可以在这种情况下进行调试吗?

谢谢

最佳答案

在调试与您用于调试的同一服务器上运行的 X 程序时,通常会出现锁定。例如,如果下级(正在调试的程序的 gdb 术语)进行了服务器抓取——糟糕,gdb GUI(或终端或 emacs 等)将被锁定。

您进行更多编程调试的想法是一个很好的想法,但很难让它一切顺利。正如您所发现的,某些 gdb 命令(基本上是与较差控制相关的命令)在命令中不起作用。而且,它也不太方便。

你可以朝这个方向走得更远。例如,您可以使用 SystemTap 来探测程序。

但是还有更好的方法。

一种方法是使用虚拟 X 服务器(嵌套的服务器或在虚拟机中运行的服务器)运行下级服务器。然后你可以逃到“外部”X 服务器进行调试。这样会好很多。

另一种方法是拥有两台计算机,在一台计算机上运行调试器,在另一台计算机上运行次要的程序。在某种程度上,这实际上是相同的答案,只是使用真实的机器而不是虚拟的机器。

关于c - 调试 GTK 事件回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948226/

相关文章:

c++ - C 和 C++ 中的标准头文件列表

c++ - Visual Studio中所谓的 "Frames"是什么?

linux - gdb 回溯和 pthread_cond_wait()

计算C语言中2位数字的数量

c - 结构选项错误 : array type has incomplete element type

检查字符串是否未分配

debugging - 在不安装的情况下测试 IE7 - 如何?

windows - 如何使用windbg分析Chrome Aw Snap后的异常

c - 尝试单步执行代码时 gdbserver 锁定

c++ - 段错误,但不在 valgrind 或 gdb 中