我在 Firefox 中使用调试器设置了一个断点。刷新后,断点消失,网页完全加载。可能是什么问题?我能够成功地在 Chrome 中保留断点。
尝试删除文件时,我遇到了一些奇怪的行为。下面是一个快速代码示例:
if (File.Exists(filePath))
{
File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
奇怪的行为是尝试删除文件时抛出 System.IO.IOException:
System.IO.IOException
HResult=0x80070020
Message=进程无法访问文件“C:\ProgramData\Path\To\File.sqlite”,因为该文件正被另一个进程使用。
来源=mscorlib
在我们的应用程序中,我们仅在 using 语句中访问文件,以避免任何持久保留。该文件是一个 sqlite 数据库,没有持久或打开的连接。
这似乎是一个很正常的问题。当向代码添加断点时,奇怪的行为就开始了。例如,如果我们在上面添加 Console.WriteLine 语句,则在该语句上中断,然后继续:
<x> Console.WriteLine("Break");
if (File.Exists(filePath))
{
File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
没有抛出异常。
如果我们像这样添加断点:
Console.WriteLine("Break");
if (File.Exists(filePath))
{
<x> File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
Console.WriteLine("Break");
<x> if (File.Exists(filePath))
{
File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
抛出异常。
除了更改断点之外,一切都运行得完全相同。我们可以可靠地重现这种行为。我对这种行为进行了一些研究,但找不到任何适用的内容。我很好奇这种行为是否在任何地方都有记录,或者我是否遗漏了任何明显的东西。
编辑:我忘记添加一些注释,我们可以在多台不同的机器上重现此行为。添加 aThread.Sleep()不会改变行为。
任何见解都将不胜感激!
我正在尝试通过 GDB 在 C++ 中的模板函数中设置断点,我尝试了三种可能的方法。
总体目标是使用如下所示的脚本通过 GDB 跟踪完整的代码流,但我的代码也有很多模板函数。下面的示例 GDB 脚本
set logging on
b func2
commands
silent
bt 1
continue
end
b func1
commands
silent
bt 1
set logging off
continue
end
Run Code Online (Sandbox Code Playgroud)
您能否帮忙提出一个正确的解决方案,或者如果我遗漏了什么,请告诉我?任何帮助/建议都将受到高度赞赏,并大大简化我的调试。
预先非常感谢!
我在 Visual Studio 2019 中启动了一个新的 Python 3.8 项目。我为该项目创建了一个虚拟环境。我在一行上放置了一个断点并启动了调试器。调试时,调试器没有在断点处停止,断点上的工具提示闪烁了以下消息:
当前不会命中断点。文件中的断点被过滤器排除。注意:可能会因为“justMyCode”选项而被排除(默认== true)。尝试在调试配置中设置 "justMyCode": false (例如 launch.json)
我的项目甚至没有 launch.json。我在设置中找到了“仅我的代码”选项,并且它已设置为 false。
知道为什么它不会在断点处停止吗?
我一直在开发 MAUI android 应用程序,在调试时,断点没有命中,应用程序进入中断状态。但对于 Windows 应用程序来说它效果很好。我认为这是 Visual Studio 2022 中 .NET 6 Android 工具的问题。这个问题有什么解决方案吗?
对于以下 scala 代码,当我在 if 语句处设置调试点并启用“日志:断点命中消息”时
object App1 {
def main(args: Array[String]): Unit = {
iftest()
}
def iftest(): Unit = {
val setA: Set[String] = Set("a", "b", "c");
var setB: Set[String] = Set("d", "e", "f")
if(setA.size > setB.size){ //here break point at line 8
println("bigger")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在控制台中得到以下输出。问题是为什么这个断点会被击中两次?
Breakpoint reached at com.eguller.App1$.iftest(App1.scala:8)
Breakpoint reached at com.eguller.App1$.iftest(App1.scala:8)
Run Code Online (Sandbox Code Playgroud)
但对于以下类似的 Java 代码,断点仅被命中一次。
Breakpoint reached at com.eguller.App1$.iftest(App1.scala:8)
Breakpoint reached at com.eguller.App1$.iftest(App1.scala:8)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
Breakpoint reached at com.eguller.JApp.main(JApp.java:8)
Run Code Online (Sandbox Code Playgroud)
这是 Intellij 调试器中的错误,还是 Scala 编程语言的功能?
IntelliJ IDEA …
我有以下内容:
classA::FuncA()
{
... code
FuncB();
... code
}
classA::FuncB(const char *pText)
{
SelectObject(m_hDC, GetStockObject ( SYSTEM_FONT));
wglUseFontBitmaps(m_hDC, 0, 255, 1000);
glListBase(1000);
glCallLists(static_cast<GLsizei>(strlen(pText)), GL_UNSIGNED_BYTE, pText);
}
Run Code Online (Sandbox Code Playgroud)
我可以在FuncA的任何地方点击断点.如果我尝试进入FuncB,它会跳过.它将接受FuncB中的断点,但永远不会命中它.我知道它正在执行FuncB,因为我可以在FuncB中放入一个MessagBox()调用并获取消息框.
在远离广泛的VC6使用几年后,我是VS2005的新手.我记得VC6时代的这种情况,如果没有符号信息.但是,在这种情况下,两个函数都在同一个文件中,因此符号信息必须正确.同样在那种情况下,我认为你甚至无法设置断点.
我尝试过所有愚蠢的伏都教,就像重建整个解决方案一样.
我忽略了什么愚蠢的事情?
编辑:添加了FuncB的代码,以回应关于它可能基本上是内联的评论.(这只是来自MSDN的wglUseFontBitmaps的确切示例代码[此处为减号]).我不知道内联是如何妨碍逐步完成每次通话的.
是否可以让Eclipse在调试时在代码中的特定点执行任意表达式?
执行/显示功能允许您在调试的上下文中运行任意代码.断点会停止流动.
我喜欢的是类似断点,可以插入类中的特定点,不会挂起应用程序流,而是执行一段代码.
背景是我正在尝试调试一些我无法编辑的多线程代码,我想做一些天真System.out.println的事情来看看各种事情何时发生.如果我使用断点,那么事件流将受到干扰.
在帮助文档中,可以使用以下命令设置数据访问断点
var.break <variable> /READWRITE
Run Code Online (Sandbox Code Playgroud)
但是,这仅在我们输入该变量的上下文时才有效。
因为我想编写PRACTICE脚本来执行自动调试,所以我想在程序运行之前执行此操作。就像是
....
var.break <foo>::<variable> /READWRITE
GO
WAIT !run()
...
Run Code Online (Sandbox Code Playgroud)
有办法吗?