如何在C++ Builder 10.2.3中可控触发崩溃以调试iOS FireMonkey应用
可控触发C++ Builder应用崩溃的几种方法
嘿Russ,我正好有几个在C++ Builder 10.2.3里可控触发崩溃的实用法子,专门帮你做符号化调试实验的,你可以按需挑着用:
1. 空指针解引用(最经典的崩溃场景)
这是最常见的崩溃类型,能直接触发访问违规(Access Violation),非常适合验证符号化调试是否正常工作。
void TriggerNullPtrCrash() { int* pNull = nullptr; *pNull = 42; // 解引用空指针,立刻触发崩溃 }
你可以把这个函数绑定到按钮点击事件里,一点击就触发崩溃,操作很直观。
2. 数组越界访问
模拟内存越界的错误场景,这种崩溃在实际开发中也很常见,用来测试符号化调试对内存错误的定位能力。
void TriggerArrayOverflowCrash() { int arr[3] = {1, 2, 3}; int val = arr[100]; // 访问超出数组范围的内存,大概率触发崩溃 }
注意:有时候因为内存布局的原因,可能不会立刻崩溃,但在调试模式下或者多次触发后肯定会触发,适合测试边界情况。
3. 调用空函数指针
和空指针解引用类似,但属于函数调用层面的错误,同样能稳定触发崩溃。
void TriggerFuncPtrCrash() { void (*crashFunc)() = nullptr; crashFunc(); // 调用空函数指针,直接触发崩溃 }
4. 未捕获的C++异常
如果你的应用使用了C++异常机制,故意抛出一个未捕获的异常也能让程序崩溃:
#include <stdexcept> void TriggerUncaughtException() { throw std::runtime_error("Intentional uncaught exception to trigger crash"); // 没有try-catch包裹的话,程序会直接终止崩溃 }
记得要确认C++ Builder的异常设置,确保未捕获的异常会导致程序崩溃,而不是被系统默认处理。
5. 使用Windows API主动触发崩溃
这种方法可以自定义异常代码,让你能精准识别是自己故意触发的崩溃,非常适合调试实验:
#include <windows.h> void TriggerWinAPICrash() { // 触发一个不可继续的自定义异常,异常代码可以自己定义(这里用0xE0000001) RaiseException(0xE0000001, EXCEPTION_NONCONTINUABLE, 0, nullptr); }
额外小贴士
- 建议先在调试模式下测试这些代码,确保能稳定触发崩溃,再切换到发布模式验证符号化调试(记得保留调试符号文件
.tds,发布时要和程序对应上)。 - 可以把这些崩溃触发函数绑定到UI控件(比如按钮、菜单)的事件上,方便手动触发。
内容的提问来源于stack exchange,提问作者relayman357
相关产品推荐
相关产品推荐

