我正在调试一个严重断言()的iPhone应用程序(Xcode,Objective-C++和设备模拟器).在某些情况下,断言失败只会终止应用程序,而不是像我期望的那样进入调试器.
我通过实现我自己的有效断言来解决这个问题:
#define AssertLite(b) if(!(b)) {asm {int 3}}
Run Code Online (Sandbox Code Playgroud)
(绒毛省略),但我想知道是否有人遇到过这个.我无法确定何时断开以及何时终止的模式.代码没有线程化; 它只是在事件处理程序中完成.
为什么会发生这种情况,如何使vanilla assert()表现得像条件断点呢?
我最近发现了一个非常明显的Microsoft CryptoAPI问题解决方案.由于(看似无关的)CREDHIST文件上的只读标志,整个CryptoAPI堆栈从CryptAcquireContext()向上突然行为不端.为了更大的共同利益,我希望在MS KB中记录它,它属于它.
从我过去对MS KB的攻击我知道陌生人不应该提交文章; 只有MS员工和承包商才这样做.所以我正在寻找一个MS代表赞助商,代表我提交文章.信用无关紧要; 文章无论如何都是匿名的.
完整的文章:http: //social.msdn.microsoft.com/Forums/en/windowssecurity/thread/11b08625-b432-4667-ab82-a7e0ed008fc3
我有一个Delphi Windows应用程序,在Wine下可怕地死亡 - 甚至没有创建主要表单.出于各种原因,移植到Free Pascal不是一种选择.
我可以使用Delphi的本地方法在Wine下调试吗?如果没有,我可以使用gdb在Wine下调试,如果是这样,我如何将调试信息以Delphi格式(可能是Turbo Debugger)提供给gdb?
最后,如何从程序中检测出Wine?葡萄酒常见问题解答说我不应该,但我不认为修复我的应用程序在Wine的优先级列表中很高,所以我宁愿自己解决这些问题.
我没有编写应用程序,但我有源代码和Delphi的副本.
在Android Java世界中,是否有一种直接(理想情况下是一次调用)方式将数组转换int为a ArrayList<Integer>和back?调用toArray()ArrayList返回一个数组Integer- 不是我想要的.
我可以通过循环手动轻松完成(事实上已经做过).我想知道库/语言是否支持相同.
编辑:谢谢大家,我已经写了自己的拳击手和unboxer.我很惊讶语言/ RTL设计师自己没有想到它,特别是原始类型的设计不符合集合.
序言:这个问题已经过时了.
创建Android虚拟设备(AVD)时,可以选择CPU/ABI.我已经尝试了所有可用的目标 - 除了ARM之外别无选择.我的目标是Android 3.2.
我假设这是为了在x86上模拟平板电脑或上网本.那些甚至存在于硬件中吗?什么样的目标会支持不同的ABI?
编辑:在Android Tools v17中,API级别10下有一个可选的Intel Atom x86映像.
编辑2:ARMv7a现在也在那里.到目前为止没有MIPS.
EDIT3:MIPS仿真器和图像现在也可用.等待一些新架构(ARMv8?针对非Atom的Intel风格?x86_64?SH3/4?),这个问题完全没有意义.
我在过去一天左右收到这条消息,直到现在它还没有引起问题.我让我的代码早先与我的本机库一起运行,但今天我添加了一些新功能,但它再次无效.
LogCat中没有显示错误,但我的程序只是在我的设备上立即打开和关闭.没有消息说应用程序意外停止,只是屏幕上出现黑色闪烁.
我已经浏览了谷歌和搜索引擎优化,但这个消息有很多不同的原因.这是我的LogCat:
08-03 10:44:50.186: D/dalvikvm(2143): Trying to load lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): Added shared lib /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58
08-03 10:44:50.186: D/dalvikvm(2143): No JNI_OnLoad found in /data/data/my.eti.commander/lib/libRelayAPI.so 0x40514f58, skipping init
08-03 10:44:50.288: I/DEBUG(1058): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-03 10:44:50.288: I/DEBUG(1058): Build fingerprint: 'LENOVO/IdeaPad_Tablet_A1_07/A1_07:2.3.4/GRJ22/eng.user.20120209.100319:user/release-keys'
Run Code Online (Sandbox Code Playgroud)
我想知道的是:
1)此No JNI_OnLoad消息是否导致我的程序无法打开?
2)如果是这样,我知道我没有发布任何代码,但有人可以解释这条消息的一般概念.包括init它是什么跳过.
编辑:
我今天添加的新功能在发生这种情况时被注释掉了.我最初得到了一个不同的错误,并希望确保我的旧代码仍然有效.
浏览Android API源代码.有FileDescriptor一个descriptor没有访问修饰符的数据成员:
int descriptor;
Run Code Online (Sandbox Code Playgroud)
然后有FileOutputStream一个类构造一个新的FileDescriptor并分配给该字段:
fd = new FileDescriptor();
fd.descriptor = fileSystem.open(...);
Run Code Online (Sandbox Code Playgroud)
这与Java的现场访问控制模型如何兼容?我认为无法从声明类外部访问包私有字段,并且没有像C++那样的友情概念.
我正在解释来自C#Windows Phone应用程序的异常报告.一种方法抛出一个NullReferenceException.方法是:
public void OnDelete(object o, EventArgs a)
{
if (MessageBox.Show(Res.IDS_AREYOUSURE, Res.IDS_APPTITLE, MessageBoxButton.OKCancel) == MessageBoxResult.OK)
m_Field.RequestDelete();
}
Run Code Online (Sandbox Code Playgroud)
它与m_Fieldnull 一致- 那里没有任何其他可能为null的东西.但这是神秘的部分.
该GetILOffset()从StackFrame从StackTrace该异常对象返回0×13.如ILDASM所示,该方法的MSIL为:
IL_0000: call string App.Res::get_IDS_AREYOUSURE()
IL_0005: call string App.Res::get_IDS_APPTITLE()
IL_000a: ldc.i4.1
IL_000b: call valuetype (...) System.Windows.MessageBox::Show(...)
IL_0010: ldc.i4.1
IL_0011: bne.un.s IL_001e
IL_0013: ldarg.0
IL_0014: ldfld class App.Class2 App.Class1::m_Field
IL_0019: callvirt instance void App.Class2::RequestDelete()
IL_001e: ret
Run Code Online (Sandbox Code Playgroud)
这是我不明白的.如果偏移确实是0x13,则意味着该ldarg行导致异常.但该命令记录为不会抛出任何异常.这callvirt应该扔,不是吗?或者相对于方法开始以外的其他方式的偏移量?ldfld也可以抛出,但仅当this对象为null时; 这在C#AFAIK中是不可能的.
文档提到调试信息可能会妨碍偏移,但它是一个发布版本.
我正在使用ILDASM检查的DLL正是我作为XAP的一部分发送到Windows Phone Store的DLL.
平均而言,这更快 - 检查值,然后,如果需要,分配,或只是分配?或者,用C++术语:
bool b;
if(b)
b = false;
Run Code Online (Sandbox Code Playgroud)
要么
b = false;
Run Code Online (Sandbox Code Playgroud)
假设if()条件为真,概率为50%.答案很可能是高度依赖于架构的 - 请说出您的低级别考虑因素.写入总是弄脏缓存行 - 对吧?因此,通过避免写入,我们在0.5个案例中避免了缓存刷新.但是足够聪明的缓存可能会检测到一个简单的写入而不是自己的脏.但无条件写入始终只是一个内存操作,而读写平均是1.5个操作.
免责声明:这是一个好奇的问题,而不是我实际面临的问题.
试图将Delphi库移植到Android.免费Pascal支持Android/ARM - 可以使用Windows的预构建编译器.但是,Android NDK现在也支持MIPS和x86.FPC支持者的状态如何?目前,我的项目或多或少与CPU无关 - 本机位是为所有四种支持的体系结构构建的.不想放手.
我不是在Pascal的完整Android开发周期之后 - 只是一个没有I/O的算法库.我尝试用p2c将其翻译成C语言,但译者对来源进行了扼流.
我是否应该尝试使用Linux为相关CPU构建交叉编译器,然后链接到NDK库?
编辑:我已经从Android分支的源代码构建了针对Intel/Linux的交叉编译器.它工作,除了你必须调用ppcross386编译,而不是fpc.看起来,后者忽略-Tlinux选项并调用Intel/Win32编译器.
EDIT2:对makefile和源进行少量更改,MIPS交叉编译器构建.但是,随着构建转移到跨CPU RTL,它几乎立即出错.