如何使用GDB调试32位x86处理器上没有调试符号的程序?检查函数参数,局部变量,解析指针对于知道如何操作很有用.目的并不是将它用于逆向工程,因为我有时候懒得安装调试符号,并且很高兴知道如何从gdb中获取一些基本信息.
我正在使用OCUnit为我的iPhone应用程序编写测试.有没有办法调试单元测试并有一个断点来看看发生了什么?
在不能使用断点的情况下编写单元测试非常困难.
一个奇怪的Visual Studio 2010调试器案例(它无法达到一个断点)
这是重现问题的代码:
class Program {
static void Main(string[] args) {
bool b = false;
if (b) {
List<string> list = new List<string>();
foreach (var item in list) {
}
} else {
Console.WriteLine("1");
}
Console.WriteLine("2");//add a break point here in VS2010
}
//1. configuration: release
//2. platform target: x64 or Any Cpu
//3. debug info: pdb only or full
//4. OS: Win7 x64
//5. optimize code: enabled
}
Run Code Online (Sandbox Code Playgroud)
在代码的最后一个语句中添加一个断点,然后在vs2010中调试它,你会看到无法命中断点.
要重现这个奇怪的情况,您需要满足以下条件:
我有一个Eclipse(java)项目,它在不存在的断点处停止.这个位置有一个断点,但我把它删除了.有什么想法会发生这种情况吗?
注意:这里提到的问题不一样 - 幻影断点让我抓狂!
因此,我正在为其应用程序的预制调试应用程序,因此我启用了"所有例外"的通用断点.从那时起,每次运行应用程序时,控制台都会打印:
Catchpoint 2(throw)待定断点1 - "objc_exception_throw"已解决
objc [11765]:类__NSCFLocale的对象0x8f18ff0自动释放,没有池到位 - 只是泄漏 - 在objc_autoreleaseNoPool()中断以调试
objc [11765]:类__NSCFNumber的对象0x8f190a0自动释放,没有池到位 - 只是泄漏 - 在objc_autoreleaseNoPool()中断以调试
objc [11765]:类__NSCFLocale的对象0x8f1fef0自动释放,没有池到位 - 只是泄漏 - 在objc_autoreleaseNoPool()中断以调试
字面打印3次.我不知道这意味着什么,但看起来很糟糕.任何意见,将不胜感激.
我正在使用gdb来调试C项目源代码.我编译如下:
./configure --enable-debug CFLAGS="-g -o0"
make --debug=a
Run Code Online (Sandbox Code Playgroud)
我想在特定文件中调试stop.所以当我通过使用设置断点时
(gdb) break main.c:672
Run Code Online (Sandbox Code Playgroud)
它说:
No source file named main.c.
Run Code Online (Sandbox Code Playgroud)
即使我传递特定的函数名称(在main.c文件中)来打破.它说:这样的功能没有定义.
我当前的目录有这个main.c文件.我在Windows上使用Cygwin.当我使用时设置断点
(gdb) break main
Run Code Online (Sandbox Code Playgroud)
它在Cygwin文件的主要功能中设置了断点,而不是在我的源代码中.
我怎样才能解决我的第一个问题?
只是好奇,如果在Cygwin文件和我的源代码中有相同的函数名称,如何避免第二个问题?
我正在iPhone模拟器上调试Objective-C应用程序.该应用程序编译和工作.Xcode设置之前让我设置调试器断点并使调试器实际中断.
现在,断点显示为灰色,调试器不会在任何断点上停止.单击断点使其变为浅灰色,但不是正常的蓝色.

有人能告诉我我需要恢复哪个设置才能再次启用调试?谢谢.
假设我有一个模板类:
template <typename T>
class A
{
public:
void foo()
{
int i = 0; //breakpoint here only for type A<int>
}
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式在Visual Studio中添加一个断点,它只会在内部foo进行某个实例化吗?
只喜欢A<int>::foo?
假设我有100个不同类型的模板化A实例.
编辑:
我知道如何以一种我可以专门化某种类型的方式进行实例化.
问题是,如果没有专业化,我能做到吗?
我正在调试一些第三方缩小的Javascript,某个地方正在触发浏览器页面刷新.但是,我无法弄清楚代码的哪一部分导致刷新.
有没有办法在Chrome中设置一个断点,它会在页面刷新之前被点击,这样我就可以检查调用堆栈以查看导致它的原因了什么?
我有着名的"断点不会被击中.没有为此文档加载任何符号." - 问题并受到此主题的启发:
我启动了调试器,打开Debug - > Window - > Modules,右键单击程序集 - > Symbol Load Information.它指向一个奇怪的地方:
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files {myProjectFolder}\8df46672\bbaeb99e\assembly\dl3\c29c5e19\aa46dcf7_10dccc01 {myProject} .pdb:符号已加载.
当我删除时,它暂时解决了我的问题{myProjectFolder}.但它仍指向此.pdb文件(VS在删除后重新创建临时文件夹).我想它应该指向bin目录中的.pdb,就像在其他程序集中一样.我该如何解决这个问题?或者这是正常的行为?
对于任何tipps来说......
编辑:它是一个ASP.NET - Project(.NET 4.0),MVC 3.到目前为止还没有包含COM库.我现在再次删除了上面提到的目录,并再次以"断点当前不会......"结束.如果我打开模块窗口,符号状态显示所有程序集的"跳过加载符号."除外App_global.asax.exot9a5x.dll.
编辑2:网站配置为在本地IIS 7上运行.如果我更改为Visual Studio开发服务器,调试工作正常.似乎与IIS有关?
breakpoints ×10
debugging ×7
xcode ×3
gdb ×2
ios ×2
objective-c ×2
.net ×1
asp.net ×1
c ×1
c# ×1
c++ ×1
cygwin ×1
eclipse ×1
javascript ×1
symbols ×1
templates ×1
unit-testing ×1