问题: 我希望能够在我的 C 代码中放置不同的潜在唯一或重复的“标签”,以便我可以在 gdb 中使用它们来创建断点。
类似工作:
行号断点:与源代码行上的断点的主要区别在于,如果以导致或多或少的行的方式修改标记之前的代码,则对标记的引用在语义上仍然是正确的,对源代码行的引用则不会。
标签:我来自上一个问题,如何告诉 gcc 保留我未使用的标签?,其中我先入为主地认为答案是插入标签。在与平台上知识渊博的成员讨论后,我得知标签的名称在编译后不会保留。C 中未使用的标签将被编译器删除。
注入 asm 标签:与之前的方法相关,如果我在 C 源代码中注入 asm 代码,由于内联函数、编译器优化和缺乏作用域,会出现某些问题。这使得这种方法不稳健。
定义一个虚拟函数:在另一个问题上,Set GDB Breakpoint in C file,有一个有趣的方法,其中可以在代码中放置一个“虚拟”函数,然后在函数调用中添加断点。这种方法的问题在于必须为每个不同的标签复制此类函数的定义。
有更好的解决方案来实现这一点吗?或者从不同的角度来解决所提出的问题?
在 Visual Studio 2019 中,当我使用“来自现有代码”模板创建 python 项目时,我无法让断点实际工作。当我开始调试时,断点会变黑,并且当我将鼠标悬停在断点上时会显示以下内容:
当前不会命中断点。文件中的断点被过滤器排除。注意:可能会因为“justMyCode”选项而被排除(默认== true)。尝试在调试配置中设置 "justMyCode": false (例如 launch.json)
然而,所有在线信息都launch.json与 VS Code 相关,而不是 VS 2019。
如果我尝试模仿您在 VS Code 中执行的操作(但在 VS 2019 中)并将文件launch.json放入我的项目.vs文件夹中,那么它不会执行任何操作。我确认我通过 VS Code 正确配置了 json 文件,并且它确实修复了那里的断点问题。
在 VS 2019 的“工具”->“选项”窗口中禁用“仅我的代码”选项也不会执行任何操作。那么你打算如何在 VS 2019 中做到这一点呢?
我在这里写了一个非常简单的Qt程序:
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QTableView table(&frame);
table.resize(100, 100);
table.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试设置一个点击表的断点时,我从gdb得到这个错误:
(gdb) symbol-file /usr/lib/libQtGui.so.4.4.3.debug
Load new symbol table from "/usr/lib/libQtGui.so.4.4.3.debug"? (y or n) y
Reading symbols from /usr/lib/libQtGui.so.4.4.3.debug...done.
(gdb) br 'QAbstractItemView::clicked(QModelIndex const&)'
Breakpoint 1 at 0x5fc660: file .moc/release-shared/moc_qabstractitemview.cpp, line 313.
(gdb) run
Starting program: ./qt-test
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x5fc660: Input/output error.
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么不能插入断点?
我正在使用Visual Studio 2010来创建Silverlight 4应用程序.
我在代码隐藏中设置了一个断点,从Visual Studio启动调试会话,不幸的是,我的断点永远不会被击中.
所以,我最终尝试将我的默认浏览器设置为Internet Explorer ...并且看到......我的断点突然被击中.
Chrome是否是支持调试Silverlight应用程序的浏览器?如果是这样,为了让这个工作起来,我错过了什么?
或者,Internet Explorer是调试时唯一受支持的浏览器吗?
我在我的应用程序中有一些"流氓"OutputDebugString调用打印出"T",但我无法找到它.
是否有可能以某种方式在OutputDebugString -function上设置断点并查看它的调用位置?
我正在使用Delphi 2009.
这可能看起来很奇怪Q.
我用Java编写了一个代码(在Eclipse中).然后,我对代码做了一些修改.现在,我正在尝试运行新代码(已修改),但它仍然提供了它为前面的代码提供的输出.
我在代码中放了几个调试点,但它正在跳过一些调试点(虽然它应该停在它们上面)并在某个调试点停止,但即使在这里它也调用了前面代码中存在的方法位置(虽然我现在评论他们).它似乎从某个地方仍在调试旧代码.
如何摆脱它?
谢谢!
调试时,如果满足if语句中的条件,如何停止?例如:
if (!check()) {
int a = 0;
}
Run Code Online (Sandbox Code Playgroud)
int a = 0; 是虚拟代码,然后我在那里放了一个断点.如果我在一个空的if循环中放置一个断点,调试器就不会停在那里,它只会在它可以执行的指令处停止.即使你做了一个; 只是声明它不会停止.
我可以用其他方式执行此操作而不是编写虚拟代码吗?
谢谢
我试图用设置在一类的构造函数断点在外部装配Debug,New Breakpoint,Break at function.
我已经尝试过使用这两个.ctor并ctor作为函数名称,但都不起作用
System.Web.Mvc.ViewResult..ctorSystem.Web.Mvc.ViewResult.ctorSystem.Web.Mvc.ViewResult.ViewResult如果班级有多个控制器,那么这将有效;
System.Web.Mvc.HttpUnauthorizedResult.HttpUnauthorizedResult在某些情况下,Visual Studio将构造函数名称显示为类名,例如with HttpUnauthorizedResult,但在其他情况下,它会显示构造函数名称,.ctor例如with System.Uri.


相关问题:
我在Visual Studio 2013 Professional中遇到条件断点问题.断点条件是指一个局部变量(tagString),它在断点之前的代码行中声明和初始化.在遇到断点时,调试器声称......
断点的条件无法执行.条件是
tagString.Contains("…").返回的错误是'tagString未声明.由于其保护级别,它可能无法访问.
此错误消息似乎没有任何意义,因为该变量已声明且可访问:

我正在运行此代码的Debug版本.为什么调试器声称未定义局部变量,如何解决此问题?
PS:我刚刚意识到条件断点不起作用只是一个大问题的一小部分:调试器也无法监视该变量,也不会显示在Locals窗口中.
PPS:我已经尝试过Rick Strahl博客文章中提出的建议,"Visual Studio 2013'无法评估表达式'调试器异常",但无济于事.
debugging breakpoints conditional-breakpoint visual-studio-debugging visual-studio-2013
我正在调试内核,我想知道cr3寄存器何时被更改.我知道如何在像eax和其他人这样的通用寄存器上设置观察点.
问题是,由于gdb无法访问控制寄存器,因此在cr3上设置观察点不起作用.
那么,是否可以从qemu监视器设置观察点?如果有,怎么样?
breakpoints ×10
debugging ×6
gdb ×3
assembly ×1
browser ×1
c ×1
c# ×1
c++ ×1
delphi ×1
delphi-2009 ×1
eclipse ×1
gcc ×1
java ×1
kernel ×1
python ×1
qemu ×1
qt ×1
qt4 ×1
silverlight ×1
watchpoint ×1