我正在调查由以下代码引起的转储:
shared_ptr<Type_Definition> entry = function_result();
if (entry != nullptr) {
if (launch_other_function(entry, value, timestamp)) { // <= here it crashes
...
将三个变量放入Watch窗口时(将光标放在崩溃线上),我看到:
timestamp
和value
entry
:Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away.
我相信function_result()
会给出一个空指针,null-pointer
检查entry
无法识别它,让它通过,从而导致访问冲突(为了您的信息,异常消息指出Access violation executing location 0x00000000.
)。
我的问题不是:如何检查空指针(我知道可以使用if (entry)
完成),但是:我是否正确,此检查可能允许±nullish shared pointer
(对不起) ,我不知道如何正确地制定它来通过这个条件?
有人有想法吗?
供您参考:特此声明launch_other_function()
:
bool launch_other_function(const shared_ptr<Type_Definition>& entry, double value, DATE timestamp){
...
}
在Disassembly窗口中,我看到以下几行代码(我希望它有意义):
0127AA32 85 C0 test eax,eax
0127AA34 0F 84 3C 01 00 00 je 0127AB76
0127AA3A 8B 8D 9C FE FF FF mov ecx,dword ptr [ebp-164h]
0127AA40 FF 15 E4 AF 31 00 call dword ptr ds:[31AFE4h]
0127AA46 85 C0 test eax,eax
0127AA48 0F 84 AC 00 00 00 je 0127AAFA
0127AA4E 8B 85 9C FE FF FF mov eax,dword ptr [ebp-164h]
0127AA54 8B B8 80 00 00 00 mov edi,dword ptr [eax+80h]
0127AA5A DD 45 0C fld qword ptr [ebp+0Ch]
0127AA5D 83 EC 08 sub esp,8
0127AA60 DD 1C 24 fstp qword ptr [esp]
0127AA63 C7 85 8C FE FF FF 78 15 4C 00 mov dword ptr [ebp-174h],4C1578h
0127AA6D 89 A5 90 FE FF FF mov dword ptr [ebp-170h],esp
0127AA73 C7 85 94 FE FF FF 87 AA 27 01 mov dword ptr [ebp-16Ch],127AA87h
0127AA7D C6 46 08 00 mov byte ptr [esi+8],0
0127AA81 FF 15 74 17 4C 00 call dword ptr ds:[4C1774h]
0127AA87 83 C4 08 add esp,8
0127AA8A C6 46 08 01 mov byte ptr [esi+8],1
0127AA8E 83 3D 40 D0 01 69 00 cmp dword ptr ds:[6901D040h],0
0127AA95 74 09 je 0127AAA0
0127AA97 50 push eax
0127AA98 52 push edx
0127AA99 E8 82 D9 8B 67 call 68B38420
0127AA9E 5A pop edx
0127AA9F 58 pop eax
哦,我忘记了:多线程的程序确实。
关于添加调试信息,我担心添加的内容不多,我可以在以下modules
标签的摘录中看到(对于这两种情况(我猜,管理本地人)代码),符号已加载):
<Product_Name>.exe <Product_Name>.exe C:\<Product_Name>.exe N/A Yes Symbols loaded. C:\Dump_Analyse\<Product_Name>.pdb\5BEA8C97EB644ED2B06B9AFE450EF23E1\<Product_Name>.pdb 2 9.05.1638.3292 25/10/2017 15:02 01050000-011DC000 <Product_Name>.exe_180423_041510.dmp
<Product_Name>.exe <Product_Name>.exe C:\<Product_Name>.exe Yes No Symbols loaded. C:\Dump_Analyse\<Product_Name>.pdb\5BEA8C97EB644ED2B06B9AFE450EF23E1\<Product_Name>.pdb 14 9.05.1638.3292 25/10/2017 15:02 01050000-011DC000 <Product_Name>.exe_180423_041510.dmp [1] <Product_Name>.exe
提前致谢