Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过编程检测GDB到达的断点_Gdb_Gdb Python - Fatal编程技术网

通过编程检测GDB到达的断点

通过编程检测GDB到达的断点,gdb,gdb-python,Gdb,Gdb Python,我有一个调试我的应用程序的脚本,它确实设置了2个断点。如果我手动调试它,我将能够看到哪一个被触发。但是以一种自动的方式来做,我不知道到达了哪个断点,有没有一种方法来写if条件或者什么来检测到达了哪个断点 如果这个特性在vanilla gdb中不可能实现,而只在python gdb中实现,那么我很乐意切换/升级这个过程 编辑:在汤姆的帮助下,我可以 break main commands set $gdb_breakpoint=1 end break main.cpp:4053 comman

我有一个调试我的应用程序的脚本,它确实设置了2个断点。如果我手动调试它,我将能够看到哪一个被触发。但是以一种自动的方式来做,我不知道到达了哪个断点,有没有一种方法来写if条件或者什么来检测到达了哪个断点

如果这个特性在vanilla gdb中不可能实现,而只在python gdb中实现,那么我很乐意切换/升级这个过程

编辑:在汤姆的帮助下,我可以

break main
commands
  set $gdb_breakpoint=1
end

break main.cpp:4053
commands
  set $gdb_breakpoint=2
end

break fault_handler.cpp:55
commands
  set $gdb_breakpoint=3
end

break unit_tests_complete
commands
  set $gdb_breakpoint=4
end

然后,当断点被触发时,我可以检查变量以知道我在哪里被暂停。在纯软件环境中,这可能更容易,而且可能一开始就不需要多个断点。这是在测试硬件时,如果故障可能会不规则地发生,那么这种方法应该可以做到这一点。

gdb CLI提供了一个
命令
命令,可用于将其他gdb命令附加到断点。例如:

(gdb) break main
Breakpoint 1 at 0x40ce90: file ../../binutils-gdb/gdb/gdb.c, line 25.
(gdb) commands 1
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>print "hi"
>end
。。。当遇到断点时,将安排打印“hi”


如果您喜欢使用Python,那么可以向
gdb.events.stop
事件添加侦听器,并专门查找断点停止。

gdb CLI提供了一个
命令
命令,可用于将其他gdb命令附加到断点。例如:

(gdb) break main
Breakpoint 1 at 0x40ce90: file ../../binutils-gdb/gdb/gdb.c, line 25.
(gdb) commands 1
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>print "hi"
>end
。。。当遇到断点时,将安排打印“hi”


如果您更喜欢使用Python,那么您可以在
gdb.events.stop
事件中添加一个侦听器,并专门查找断点停止。

我不喜欢Python,因为我正在尝试使这项工作尽可能兼容,如果我可以在不依赖Python的情况下实现这项工作,那么我会选择它。可悲的是,vanilla gdb出现了越来越多的限制,这对于Python来说是没有问题的,所以试图避免它可能是徒劳的。我真的很感谢你给了我这两个问题的答案。是的,gdb的CLI脚本语言非常有限。你可以用它做很多事情,但有时Python接口是唯一的方法。是的,确切地说,在我甚至没有Python选项之前,我很惊讶它仍然可以做很多事情,即使很多东西都是Python独有的特性,我最怀念的一个是能够在主机的环境变量上设置if条件。所以我现在为vanilla gdb做了一些变通方法,所以我将继续工作,直到它不可能实现,然后可能会将所有内容重写为python。这应该给用户足够的时间,他们会被告知现在就安装python,因为脚本在某个时候会需要它。我不喜欢python,因为我正试图使这项工作尽可能兼容,如果我可以在不依赖python的情况下使其工作,那么我会去做。可悲的是,vanilla gdb出现了越来越多的限制,这对于Python来说是没有问题的,所以试图避免它可能是徒劳的。我真的很感谢你给了我这两个问题的答案。是的,gdb的CLI脚本语言非常有限。你可以用它做很多事情,但有时Python接口是唯一的方法。是的,确切地说,在我甚至没有Python选项之前,我很惊讶它仍然可以做很多事情,即使很多东西都是Python独有的特性,我最怀念的一个是能够在主机的环境变量上设置if条件。所以我现在为vanilla gdb做了一些变通方法,所以我将继续工作,直到它不可能实现,然后可能会将所有内容重写为python。这应该给用户足够的时间,当他们被告知现在安装python时,因为脚本在某个时候需要它。非常荒谬的观察,我在define函数中设置了断点和“commands”,当从define函数中调用“continue”命令时,它不会触发命令,而是调用从顶部“continue”仍然可以。不确定这是否可以证明单独的SO线程问题是正确的。非常荒谬的观察,我在define函数中设置了断点和“commands”,当从define函数中调用“continue”命令时,它不会触发命令,而是调用“continue”“从上面看还是可以的。不确定这是否可以证明单独的SO线程问题是正确的。