4

我正在使用 gtkd 包装器生成器,并遇到 std.conv 异常,我根本无法获得任何符号调试信息。我用调试符号编译:

$ dmd -gc -debug utils/HTODConvert.d utils/WrapperIF.d utils/funct.d utils/DefReader.d utils/GtkWrapper.d utils/HtmlStrip.d utils/IndentedStringBuilder.d utils/convparms.d utils/GtkDClass.d -ofgtkwrap 

但回溯只是内存地址列表:

std.conv.ConvException@/usr/include/d/std/conv.d(1779): Unexpected ' ' when converting from type string to type int
----------------
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x805c4ab]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x805c57a]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x806d49e]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x806924e]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8068c4a]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8066aed]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8066824]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x806388f]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x806367c]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x805e988]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x805e910]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x805e793]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x805d6f5]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8060176]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8071140]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8070c50]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8071182]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8070c50]
/home/martin/code/d/GtkD/wrap/gtkwrap() [0x8070c04]
/lib/libc.so.6(__libc_start_main+0xf5) [0xb7dce3d5]

这是在 32 位 linux 下

$ uname -a
Linux mercury 3.3.2-1-ARCH #1 SMP PREEMPT Sat Apr 14 10:08:43 UTC 2012 i686 Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz GenuineIntel GNU/Linux

$ dmd -v
DMD32 D Compiler v2.059
4

2 回答 2

8

确保您的 dmd.conf-L--export-dynamic在其DFLAGS. 我相信 dmd 提供的版本有它,但没有它,您将无法获得函数名称,因此很有可能您的 dmd.conf 中缺少它。

于 2012-05-10T17:39:32.577 回答
1

使用 GDB 启动您的程序,您将获得正确的堆栈跟踪,不幸的是我不知道任何其他方式(您需要使用 -g 和 -gc 编译)。

于 2012-05-10T09:35:32.473 回答