Debugging 如何调试优化程序中的崩溃

Debugging 如何调试优化程序中的崩溃,debugging,gcc,optimization,Debugging,Gcc,Optimization,我试图调试一个只出现在某些cpu上的崩溃,并且只有在使用gcc optmiziation on(-03)编译时,它才不会发生在-O0上。两者都使用-g编译 我在应用程序中嵌入了mingw博士,因为崩溃发生在一台不是我的电脑上。 我收到了以下坠机报告: Error occured on Thursday, August 14, 2014 at 12:07:08. C:\Users\Schüle\Arena\Engines\Vajolet\vajolettestc\vajolet2c.exe

我试图调试一个只出现在某些cpu上的崩溃,并且只有在使用gcc optmiziation on(-03)编译时,它才不会发生在-O0上。两者都使用-g编译

我在应用程序中嵌入了mingw博士,因为崩溃发生在一台不是我的电脑上。 我收到了以下坠机报告:

Error occured on Thursday, August 14, 2014 at 12:07:08.



C:\Users\Schüle\Arena\Engines\Vajolet\vajolettestc\vajolet2c.exe caused an Access Violation at location 0040C826 in module C:\Users\Schüle\Arena\Engines\Vajolet\vajolettestc\vajolet2c.exe Writing to location 023C8000.



Registers:

eax=000036b3 ebx=0299d130 ecx=00df885d edx=023ba528 esi=be220226 edi=023b9178

eip=0040c826 esp=0299cf30 ebp=0299fe78 iopl=0         nv up ei ng nz ac po cy

cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010297



AddrPC   Params

0040C826 0299FEC0 00DFAFE0 00DFAFE0  vajolet2c.exe-------------------



Error occured on Thursday, August 14, 2014 at 13:24:32.



C:\Users\Schüle\Arena\Engines\Vajolet\vajolettestc\vajolet2c.exe caused an Access Violation at location 0040C826 in module C:\Users\Schüle\Arena\Engines\Vajolet\vajolettestc\vajolet2c.exe Writing to location 00C68000.



Registers:

eax=00002dad ebx=02bfd130 ecx=00b5887d edx=00c5c940 esi=bfffffff edi=00c5b8d8

eip=0040c826 esp=02bfcf30 ebp=02bffe78 iopl=0         nv up ei ng nz na po cy

cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010287



AddrPC   Params

0040C826 02BFFEC0 00B5AFE0 00B5AFE0  vajolet2c.exe
如果我没有错的话,两次程序都在地址0x0040C826的程序计数器处崩溃

我创建了一个文件映射,用链接器选项“-Wl,-map,prog.map”链接程序

在地图文件中,我发现了这一行:

.....
.text    0x0040a130   0x48f0 search.o
         0x0040a140        search::printPV(
         0x0040a720        search::printAllPV(
         0x0040bac0        search::StartThinking(
.text    0x0040ea20  0x8940 position.0
.....
所以我认为问题出在StartThinking函数内部

如何从gcc获得更多信息?我可以创建混合代码的反汇编吗


谢谢

在互联网上搜索后,我发现我可以创建一个asm文件,其中asm与c代码混合,选项为-Wa,-adhln

之后,我通过执行0x0040c826-0x0040a130计算了要在asm文件中搜索的偏移量,结果发现错误的指令

<山姆文件告诉我错误的C++行!!