我正在用C++编写Win32服务.我有一个自定义Assert宏调用DebugBreak()(以及其他东西).当我在Vista下运行我的服务时,服务在到达DebugBreak()调用(int 3汇编程序操作码)时崩溃,显示vista崩溃对话框.错误代码是80000003(硬编码断点).
通常我希望我的服务运行在DebugBreak()调用上,而不会在没有附加调试器的情况下执行任何操作.为什么会崩溃?是否有可能进行更改以使其继续运行?
我前段时间在SO上找到了有关此功能的信息,但主题是Visual Studio的隐藏功能(2005-2008)的副本?我再也找不到了.
我想用这样的东西:
#ifdef DEBUG
#define break_here(condition) if (condition) ... // don't remember, what must be here
#else
#define break_here(condition) if (condition) return H_FAIL;
#endif
//...
hresult = do_something(...);
break_here(hresult != H_OK);
//...
var = do_other_thing(...);
break_here(var > MAX_VAR);
Run Code Online (Sandbox Code Playgroud)
它必须表现得像一个错误的断点.这就像断言,但没有对话,更轻量级.
我不能在这里使用普通断点,因为我的模块是几个项目的一部分,可以在几个VS解决方案中进行编辑.当在其他解决方案中编辑代码时,这会导致在一个解决方案中设置的断点在源中移位.
watch varname在GDB中设置第一个(也是唯一可能的)硬件观察点之后,无法通过Delete删除它。
即使我刚刚退出GDB,该监视点似乎也已启用,直到下次重新启动为止。当我尝试在GDB重新启动后设置另一个硬件观察点时,日志中会出现一条内核消息,告诉我所有硬件观察点已被使用。似乎这与设置GDB硬件观察点/如何设置软件观察点中的问题相同,但是由于我需要硬件观察点,因此该解决方案不适用。
是否有工具或系统调用来删除此(或所有)硬件监视点?CPU是Core i5,Linux内核是Ubuntu 11.10(Oneiric Ocelot)的3.0.0-17版本。
我是一名经验丰富的开发人员,但是iOS/Objective C的新手.
下面的应用程序构建正常(模数任何错字/ cut'n'paste错误).当我运行它时,它打破了打印方法,使其看起来像是有一些错误.我看不出错误是什么或在哪里.虽然可能是一个真正的newby错误!
任何人都可以通过解释我做错了什么以及如何解决它来帮助我?
这是一个命令行MacOS应用程序,使用Foundation,在XCode中构建和运行.
@interface DayOfYear : NSObject
- (void) print;
- (id) init : (int) day;
@end // DayOfYear
@implementation DayOfYear
int dayInYr =0;
- (id) init : (int) day {
self = [super init];
dayInYr = day;
return self;
}
- (void) print {
// NSLog(@"In print with %d", dayInYr);
} // WHEN RUN THIS IS WHERE IT BREAKPOINTS SAYING "Thread 1, breakpoint 1.1, 2.1
@end
int main(int argc, const char * argv[])
{
@autoreleasepool { …Run Code Online (Sandbox Code Playgroud) 我的主要cpp文件是:
class UnifiedDirListQuery : public UnifiedQuery{
public:
UnifiedDirListQuery(){
//do something-------------line 12
}
}
//other code
int main( void ){
UnifiedQuery *query = new UnifiedDirListQuery();//-----line 56
//do something
delete query;
}
Run Code Online (Sandbox Code Playgroud)
并且分别UnifiedQuery在unified.h和中声明和定义unified.cpp.当我在gdb中调试这个程序时:
gdb: b 56
gdb: r
gdb: s
Run Code Online (Sandbox Code Playgroud)
程序跳转到第12行.如果例如定义了ctor,如何转到unified.cpp并跳转到Ctor基类.UnifiedQueryunified.cpp : line 25
更新
对于答案break UnifiedDirListQuery::UnifiedDirListQuery,gdb抱怨说:
(gdb) b UnifiedDirListQuery::UnifiedDirListQuery
[0] cancel
[1] all
?HERE
?HERE
> 1
Note: breakpoint -1 (disabled) also set at pc 0x0.
Breakpoint …Run Code Online (Sandbox Code Playgroud) 我正在尝试检测某些函数中的堆栈溢出,并希望将观察点设置为RSP寄存器指向的内存.我不能只将一个观察点设置到某个地址,因为可以从不同的地方调用该函数.所以我想在函数的开始和结束时设置断点,并强制它们启用/禁用观察点.
但是设置观察点的方式都不适合我.例如,wa $rsp观看登记册; 该
set $myvar = $rsp
wa $myvar
Run Code Online (Sandbox Code Playgroud)
使观察点跟踪... $ myvar的变化!不是它存储的价值!
很奇怪,我敢肯定,这应该是一种方式,但我不知道一个......
UPD:看起来我在gdb中发现了一个bug.二:
(gdb) wa *$rsp
Attempt to dereference a generic pointer.
(gdb) set $myvar = $rsp
(gdb) wa *$myvar
Attempt to dereference a generic pointer.
Run Code Online (Sandbox Code Playgroud)
UPD:不知道为什么,但wa &*$myvar设置了$ myvar的断点,但不应该.错误?
我发现几乎不可能通过断点来调试我自己的代码(特别是与AVFoundation和CoreMedia相关),因为苹果公司在这个框架中有大量的断点.我经常需要跨越大约15-20个连续框架断点(例如com.apple.coremedia.player.async(193):breakpoint 5.2),它们被称为一些汇编代码,以便最终继续执行应用程序.我想知道,有没有办法禁用苹果的框架断点,所以xcode只会停在我的断点上?
我有一个庞大的代码库,我想打破错误"致命的错误:在解开一个Optional值时意外地发现了nil"
这样做的最佳方法是什么?
我尝试添加两个:(在断点子窗口中)
但那没有做到.这是否意味着nil在某些框架代码而不是我的代码中?
break *main和break main()本质上有什么区别?例如:
#include <iostream>
using namespace std;
int main()
{
int x=30;
int y=40;
x=y;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我使用 break *main和watch x,它是这样的:
(gdb) b *main
Breakpoint 1 at 0x400674: file aa.cpp, line 4.
(gdb) r
Starting program: /root/dd/aa.out
Breakpoint 1, main () at aa.cpp:4
4 {
(gdb) n
5 int x=30;
(gdb) watch x
Hardware watchpoint 2: x
(gdb) c
Continuing.
Hardware watchpoint 2: x
Old value = 0
New value = 30 …Run Code Online (Sandbox Code Playgroud) 有哪些调试VBA代码的方法?
特别:
Debug命令breakpoints ×10
debugging ×4
gdb ×4
ios ×2
watchpoint ×2
c++ ×1
callstack ×1
command-line ×1
crash ×1
foundation ×1
linux ×1
service ×1
swift ×1
vba ×1
winapi ×1
xcode ×1