Debugging 如何调试优化程序中的崩溃
我试图调试一个只出现在某些cpu上的崩溃,并且只有在使用gcc optmiziation on(-03)编译时,它才不会发生在-O0上。两者都使用-g编译 我在应用程序中嵌入了mingw博士,因为崩溃发生在一台不是我的电脑上。 我收到了以下坠机报告: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
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++行!!