我正在尝试调试仅在某些cpu上出现的崩溃,并且仅在使用gcc optmiziation on(-03)进行编译时,它不会发生在-O0上。两个编译都使用-g
我嵌入了博士。 mingw在应用程序中因为崩溃发生在PC上而不是我的。 我收到了以下崩溃报告:
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”a
在地图文件中我找到了这一行:
.....
.text 0x0040a130 0x48f0 search.o
0x0040a140 search::printPV(
0x0040a720 search::printAllPV(
0x0040bac0 search::StartThinking(
.text 0x0040ea20 0x8940 position.0
.....
所以我认为问题出在StartThinking函数中。
如何从gcc获取更多信息?我可以创建一个与代码混合的反汇编吗?
谢谢
答案 0 :(得分:2)
在互联网上搜索后,我发现我可以使用选项-Wa,-adhln创建一个asm混合到c代码的asm文件。
之后我通过0x0040c826-0x0040a130计算了在asm文件中搜索的偏移量,我发现了错误的指令。
sam文件指向错误的c ++行!!