小编Sev*_*yev的帖子

为什么断言只是终止为iPhone编译的程序?

我正在调试一个严重断言()的iPhone应用程序(Xcode,Objective-C++和设备模拟器).在某些情况下,断言失败只会终止应用程序,而不是像我期望的那样进入调试器.

我通过实现我自己的有效断言来解决这个问题:

#define AssertLite(b) if(!(b)) {asm {int 3}}
Run Code Online (Sandbox Code Playgroud)

(绒毛省略),但我想知道是否有人遇到过这个.我无法确定何时断开以及何时终止的模式.代码没有线程化; 它只是在事件处理程序中完成.

为什么会发生这种情况,如何使vanilla assert()表现得像条件断点呢?

iphone debugging xcode assert objective-c++

8
推荐指数
1
解决办法
1万
查看次数

如何提交Microsoft知识库?

我最近发现了一个非常明显的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

cryptoapi

7
推荐指数
1
解决办法
263
查看次数

调试Wine上的Delphi应用程序

我有一个Delphi Windows应用程序,在Wine下可怕地死亡 - 甚至没有创建主要表单.出于各种原因,移植到Free Pascal不是一种选择.

我可以使用Delphi的本地方法在Wine下调试吗?如果没有,我可以使用gdb在Wine下调试,如果是这样,我如何将调试信息以Delphi格式(可能是Turbo Debugger)提供给gdb?

最后,如何从程序中检测出Wine?葡萄酒常见问题解答说我不应该,但我不认为修复我的应用程序在Wine的优先级列表中很高,所以我宁愿自己解决这些问题.

我没有编写应用程序,但我有源代码和Delphi的副本.

delphi debugging wine

7
推荐指数
1
解决办法
1898
查看次数

Java中的(Un)装箱原始数组

在Android Java世界中,是否有一种直接(理想情况下是一次调用)方式将数组转换int为a ArrayList<Integer>和back?调用toArray()ArrayList返回一个数组Integer- 不是我想要的.

我可以通过循环手动轻松完成(事实上已经做过).我想知道库/语言是否支持相同.

编辑:谢谢大家,我已经写了自己的拳击手和unboxer.我很惊讶语言/ RTL设计师自己没有想到它,特别是原始类型的设计不符合集合.

java collections android boxing

7
推荐指数
2
解决办法
4285
查看次数

Android模拟器ABI

序言:这个问题已经过时了.


创建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?),这个问题完全没有意义.

android cpu-architecture android-emulator

7
推荐指数
1
解决办法
2万
查看次数

在...跳过初始化中找不到JNI_OnLoad

我在过去一天左右收到这条消息,直到现在它还没有引起问题.我让我的代码早先与我的本机库一起运行,但今天我添加了一些新功能,但它再次无效.

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它是什么跳过.

编辑:

我今天添加的新功能在发生这种情况时被注释掉了.我最初得到了一个不同的错误,并希望确保我的旧代码仍然有效.

java-native-interface android android-ndk

7
推荐指数
1
解决办法
1万
查看次数

在Java中访问包私有字段

浏览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++那样的友情概念.

java android encapsulation

7
推荐指数
1
解决办法
8675
查看次数

NullReferenceException与MSIL

我正在解释来自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()StackFrameStackTrace该异常对象返回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# cil .net-assembly windows-phone

7
推荐指数
1
解决办法
170
查看次数

然后阅读条件写入与写入

平均而言,这更快 - 检查值,然后,如果需要,分配,或只是分配?或者,用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个操作.

免责声明:这是一个好奇的问题,而不是我实际面临的问题.

cpu assembly low-level

6
推荐指数
1
解决办法
855
查看次数

在MIPS上免费使用Pascal for Android

试图将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,它几乎立即出错.

android freepascal cross-compiling fpc android-ndk

6
推荐指数
1
解决办法
1104
查看次数