3
A
回答
4
不是这样,但你可以插入一些有用的函数调用:
一种选择是创建一个功能:
void break_here()
{
/* do nothing */
}
然后在任何你想要的地方调用它,但要小心它不会被内联(放在不同的文件中,或添加一个“noinline”属性)。
然后,在GDB中,只需在break_here
上设置一个断点,就完成了。如果您觉得每次都要设置该断点,可以在主目录或包含断点命令的当前工作目录中创建一个名为.gdbinit
的文件。
在Linux上工作的另一种方法是使用一个信号:
raise (SIGUSR1);
你可以使用任何你喜欢的信号,但最好使用一个不杀你的程序(虽然你可以配置GDB如果你愿意,不要将它们传递给你的程序)。
2
我没有意识到直接设置断点的方法,但GDB会捕获中断,所以这是一种可能的解决方案。
这样的事情应该工作。你需要包括signal.h中:
raise(SIGABRT);
0
在Linux上,这我假设你在,因为你用gdb你可以做一个脚本,无论你需要一个断点与意见做代码
#!/bin/bash
#debug: Script to run programs in gdb with comments to specify break
points
echo "file ./a.out" > run
grep -nrIH "/\*GDB\*/" |
sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
awk '{print "b" " " $1 }'|
grep -v $(echo $0| sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r
exit 0
然后,就添加/*GDB*/
,脚本将使用grep查找带有这些注释的行号和文件,并在每个找到它们的文件的每一行上设置一个断点,然后启动gdb
相关问题
- 1. GDB:设置在非源文件断点
- 2. 在GDB中设置断点
- 3. 使用gdb在LibC中设置断点
- 4. GDB无法设置断点
- 5. gdb,在文件中的所有函数上设置断点
- 6. 在gdb中设置文件宽度断点
- 7. 在共享对象文件中设置gdb断点
- 8. gdb:如何在带空格的文件中设置断点
- 9. 退出信号设置GDB中断点
- 10. 在GDB的每一行设置断点
- 11. 如何在gdb中为C++设置operator()的断点?
- 12. 没有名为main.c的源文件。 gdb中断点设置
- 13. gdb挂钩设置中断
- 14. 关闭确认上设置断点GDB
- 15. 在GDB中命名断点
- 16. 在gdb中移动断点
- 17. 当我在GDB中设置一个中断点时,对于C++文件,它究竟在哪里破坏?
- 18. 当数组值在cuda-gdb中更改时设置断点
- 19. 在功能返回的GDB中设置断点
- 20. 如何使用共享库函数在gdb中设置断点
- 21. 在gdb中设置一个随机地址断点
- 22. 在emacs(或DDD)中使用gdb时无法设置断点
- 23. 在gdb-many-window中设置断点没有可视光标
- 24. GDB:仅在命中不同断点后才断点的断点
- 25. 在Eclipse中为其他源文件.zip文件设置断点
- 26. 微软的Visual Studio 2012无法设置断点在C#文件
- 27. 在GDB中设置观察点
- 28. 无法在GDB中设置观察点
- 29. 断点设置VS2015 C++不支持断点条件
- 30. 如何设置gdb中的python函数的断点
谢谢!你知道'.gdbinit'如何与Cygwin一起工作吗? – Randomblue 2012-03-12 17:27:08
完全一样,我想,虽然我依稀记得Windows有不同的文件名? GDB使用你的'$ HOME'变量作为主目录的位置。 – ams 2012-03-12 17:30:20
啊,只是查了一下:Windows *可能会使用gdb.ini作为文件名,但它只是一个GDB脚本。 – ams 2012-03-12 17:31:43