我有一个用 C++ 定义的对象,并在整个项目的各种函数和文件中使用了指向它的指针。我在更新数据时遇到问题,因此我想对其进行调试以查看发生了什么。理想情况下,我希望每次访问对象时都中断。但是,watch需要特定的内存地址。因此,举例来说,如果我有:
class data{
public:
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
那么gdb只会在a被改变时中断,因为指向数据的指针指向a,但在b被改变时不会中断。
data每当类覆盖的整个内存范围发生更改时,是否有办法中断?
我正在尝试使用Sublime Text 2设置Xdebug以在我的本地计算机上调试PHP,但我无处可去.我用PHP 5.4运行MAMP.我在php.ini的末尾输入了这个:
[xdebug]
zend_extension="/Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=On
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.remote_autostart=1
Run Code Online (Sandbox Code Playgroud)
Xdebug.so扩展随MAMP一起提供,我已经验证它位于php.ini文件中指定的位置.我可以在PHP信息中看到Xdebug信息.
在Sublime Text 2中,我安装了这个包,并将项目中的设置更改为:
{
"folders":
[
{
"path": "/Applications/MAMP/htdocs"
}
],
"settings": {
"xdebug": { "url": "http://localhost" }
}
}
Run Code Online (Sandbox Code Playgroud)
我可以按SHIFT和F8调出Sublime Text 2中插件的菜单,并可以添加或删除断点(代码行左侧会出现一个灰点).当我点击"开始调试"时,它会打开一个浏览器,其中"?XDEBUG_SESSION_START = sublime.xdebug"字符串会附加到网址上.但我的断点没有做任何事情.
我已经尝试添加xdebug_break();到我的代码中,看看是否会停止程序,但事实并非如此.浏览器和IDE似乎根本没有连接......
有任何想法吗?
我有一个包含数千个课程的大型项目。今天,我发现对于某些输入,在启用断言的情况下运行时会得出不同的结果。
由于断言本身不会引发AssertionError(我已经在该断点上出现了断点),因此这意味着代码中隐藏的某个地方是断言语句,它具有有害的副作用。问题是我不知道我的100多个断言中的哪个引起了问题。
由于assert不是Java中的方法而是关键字,因此我对如何设置断言(每次调用assert时都会命中)感到困惑。
我发现了可能的解决方法:
尽管如此,我想知道是否有人知道一种断言断言的方法,即使条件评估为真。

在图片中,我设置了两个断点,断点标记显示为两个带有反斜杠的小球,而不是两个小球.
为什么?以及如何解决这个问题?
如果指针发生访问冲突,我想在WinDbg中设置断点.有没有办法设置断点?
这是我的代码(largeAsteroids.count从不为0):
var largeAsteroids=[[SKTexture]]()
func randomLargeAsteroidTextures()->Array<SKTexture>{
let i=Int(arc4random())%largeAsteroids.count
return largeAsteroids[i]// this line triggers EXC_BREAKPOINT
}
Run Code Online (Sandbox Code Playgroud)
当我执行我的代码时,我没有收到任何错误,但我收到了EXC_BREAKPOINT.我确保没有任何断点,在索引处我有一个有效的对象.

首先我将SKTexture更改为AnyObject,但没有帮助.然后我尝试使用NSMutableArray而不是swift数组,问题仍然存在:
var largeAsteroids=NSMutableArray()
func randomLargeAsteroidTextures()->AnyObject{
let i=Int(arc4random())%largeAsteroids.count
return largeAsteroids.objectAtIndex(i) // this line triggers EXC_BREAKPOINT
}
Run Code Online (Sandbox Code Playgroud)
更新:
问题解决了,替换:
let i=Int(arc4random())%largeAsteroids.count
Run Code Online (Sandbox Code Playgroud)
通过:
let i=Int(arc4random_uniform(UInt32(largeAsteroids.count)))
Run Code Online (Sandbox Code Playgroud)
感谢Matt的解决方案:
您可能应该使用arc4random_uniform.您将从当前的实现中获得模数偏差. - 马特吉布森
在调试模式下执行期间有没有办法从当前步骤返回而不是停止应用程序?我看到这就像调试器应该return在按下"退出按钮"时插入语句.
这种行为的主要用途是快速响应重构或重写长方法; 当你想测试它的第一部分而不是在它结束时触发save\update\delete动作时.
问题主要涉及Intellij,但其他IDE的体验也很有趣.
我以某种方式挤压了您在 VBA 编辑器中应用断点的余量。我仍然可以使用快捷键应用断点,但我无法在不拖动控件的情况下将控件滚动到上一行,因为我看不到代码左侧的灰色边距。
我equals在java中有一个相当大的方法,有一堆return false语句,最后一个return true。
我想确切地查看方法退出的位置,以了解哪个字段不相等。有没有一种方法可以简单地在方法退出时添加断点,而不管方法实际退出的位置?
我知道我可以在每个 return 语句中添加断点,但我希望有一种更简单的方法。