在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 產(chǎn)品經(jīng)理/ 當(dāng) FontForge 自己出錯(cuò)時(shí)
大寫字母
設(shè)計(jì)天城體樣式
當(dāng) FontForge 自己出錯(cuò)時(shí)
確保你的字體有效,驗(yàn)證
術(shù)語表
使用 Spiro 繪制
相信你的眼睛
行間距
字間距
引言
從其他程序?qū)胱中?/span>
最終輸出,生成字體文件
創(chuàng)造“o”和“n”
EM Square
數(shù)字
完成小寫字母
粗體
創(chuàng)造你字體的基因
延伸閱讀
添加字形到阿拉伯字體
安裝 FontForge
計(jì)劃好你的項(xiàng)目
什么是字體?
字體信息和元數(shù)據(jù)
斜體
使用FontForge繪制工具
標(biāo)點(diǎn)和符號
變音和重音
間距,度量值和緊縮

當(dāng) FontForge 自己出錯(cuò)時(shí)

當(dāng)你使用 FontForge 的時(shí)候發(fā)現(xiàn)它崩潰了,那么你可能想要發(fā)送信息到 FontForge developer mailing list。使用這種方式,一個(gè)軟件開發(fā)者可能能夠找到代碼哪里出錯(cuò)并修復(fù)。然后你可以給你本地的 FontForge 打補(bǔ)丁或者只是像安裝一章描述的那樣從 Github 獲取源來的到一個(gè)不包含你報(bào)告的缺陷的升級后的 FontForge。

為了幫助開發(fā)者找到什么出錯(cuò)了,他們可能想要你的會(huì)話的回溯?;厮莅ㄒ粋€(gè)程序函數(shù)調(diào)用其他函數(shù)到達(dá)程序停止工作位置的函數(shù)調(diào)用的列表。如果回溯包含了函數(shù)的行號,那么它將是最有用的。因?yàn)榛厮輰?huì)制作到源文件和行號的引用,因此不要忘記也告訴開發(fā)者你在使用的 FontForge 版本??蛇x擇地,你可能也希望提到你在做什么的時(shí)候?qū)е铝吮罎ⅰ?/p>

使用 GNU Debugger 來報(bào)告崩潰

一個(gè)回溯是使用 GNU Project Debugger (gdb)來生成的。你可以附加 gdb 到一個(gè)已經(jīng)運(yùn)行的 FontForge 上或者在 gdb 會(huì)話中啟動(dòng) FontForge,如下:

$ gdb fontforge
GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/local/bin/fontforge...done.

然后一旦你給調(diào)試器發(fā)出了運(yùn)行命令,F(xiàn)ontForge 將會(huì)在屏幕上打開。

(gdb) run
Starting program: /usr/local/bin/fontforge 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Copyright (c) 2000-2012 by George Williams.
 Executable based on sources from 14:57 GMT 31-Jul-2012-ML-TtfDb-D.
 Library based on sources from 14:57 GMT 31-Jul-2012.

到這里你可以用通常的方法使用 FontForge,但是 FontForge 擁有了有效捕獲并報(bào)告問題的好處。

從 gdb 內(nèi)運(yùn)行 FontForge 造成的一個(gè)主要不同之處在于如何讓你一個(gè)崩潰變得明顯。沒有 gdb 時(shí),當(dāng) FontForge 崩潰時(shí)它將從你的屏幕消失。但是當(dāng)你在 gdb 中運(yùn)行 FontForge 時(shí),崩潰的 FontForge 及其窗口和用戶界面將保持打開。

如果你發(fā)現(xiàn)你的界面不響應(yīng),切換回你啟動(dòng) gdb 的終端,你可能在(gdb)提示后面的文本中看到一些東西比如“SIGSEGV”。如果你看到(gdb)提示那么 FontForge 不再運(yùn)行。在此時(shí)使用“bt”命令來的到回溯,如下面的例子所示。

如你在示例回溯中看到的,F(xiàn)ontForge 在 copy()函數(shù)內(nèi)崩潰。copy()函數(shù)被KCD_AutoKernAClass 函數(shù)調(diào)用?;厮輰?huì)告訴一個(gè)軟件開發(fā)者這些調(diào)用的確切行,同時(shí)也提示傳給 copy()的參數(shù)無效(超出邊界),從而去解決程序出錯(cuò)的地方。

Program received signal SIGSEGV, Segmentation fault. 
0x00007ffff74a7c01 in ?? () from /lib/x86_64-linux-gnu/libc.so.

 (gdb) bt
#0  0x00007ffff74a7c01 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff6389a80 in copy (str=0x900000008) at memory.c:82
#2  0x00007ffff7a4aeb5 in KCD_AutoKernAClass (kcd=kcd@entry=0xe80c40, index=2, is_first=is_first@entry=1)
    at kernclass.c:236
#3  0x00007ffff7a51405 in KCD_FinishEdit (g=0xeb0fe0, r=1, c=, wasnew=1) at kernclass.c:2020
#4  0x00007ffff5effe2d in GME_SetValue (gme=gme@entry=0xeb0fe0, g=0xe94760) at gmatrixedit.c:988
#5  0x00007ffff5f00554 in GME_FinishEdit (gme=0xeb0fe0) at gmatrixedit.c:997
#6  0x00007ffff5f01c1a in GMatrixEditGet (g=g@entry=0xeb0fe0, rows=rows@entry=0x7fffffffcf78)
    at gmatrixedit.c:2214
#7  0x00007ffff7a4ea3c in KCD_Expose (event=0x7fffffffd1e0, pixmap=0x83ae00, kcd=0xe80c40)
    at kernclass.c:1446
#8  kcd_e_h (gw=0x83ae00, event=0x7fffffffd1e0) at kernclass.c:1762
#9  0x00007ffff5eabe8f in _GWidget_Container_eh (gw=gw@entry=0xe7f040, event=event@entry=0x7fffffffd1e0)
    at gcontainer.c:269
#10 0x00007ffff5eac385 in _GWidget_TopLevel_eh (event=0x7fffffffd1e0, gw=0xe7f040) at gcontainer.c:734
#11 _GWidget_TopLevel_eh (gw=0xe7f040, event=0x7fffffffd1e0) at gcontainer.c:606
#12 0x00007ffff5ef86ce in GXDrawRequestExpose (gw=0xe7f040, rect=0xef72b0, doclear=)
    at gxdraw.c:2687
#13 0x00007ffff5eea075 in gtextfield_focus (g=0xef72a0, event=0x7fffffffd2e0) at gtextfield.c:1888
#14 0x00007ffff5eaa857 in _GWidget_IndicateFocusGadget (g=0xe94760, mf=mf@entry=mf_normal)
    at gcontainer.c:143
#15 0x00007ffff5eaac97 in GWidgetIndicateFocusGadget (g=) at gcontainer.c:155
#16 0x00007ffff5f02b1e in GME_StrSmallEdit (event=0x7fffffffd670, str=0xe10e60 "A", gme=0xeb0fe0)
    at gmatrixedit.c:890
#17 GMatrixEdit_StartSubGadgets (gme=gme@entry=0xeb0fe0, r=1, c=c@entry=0, event=event@entry=0x7fffffffd670)
    at gmatrixedit.c:1472
#18 0x00007ffff5f03d69 in GMatrixEdit_MouseEvent (event=0x7fffffffd670, gme=0xeb0fe0) at gmatrixedit.c:1499
#19 matrixeditsub_e_h (gw=, event=0x7fffffffd670) at gmatrixedit.c:1735
#20 0x00007ffff5eabd98 in _GWidget_Container_eh (gw=0xeeb2e0, event=0x7fffffffd670) at gcontainer.c:393
#21 0x00007ffff5ef6555 in dispatchEvent (gdisp=gdisp@entry=0x769a50, event=event@entry=0x7fffffffd9b0)
    at gxdraw.c:3475
#22 0x00007ffff5ef7d1e in GXDrawEventLoop (gd=0x769a50) at gxdraw.c:3574
#23 0x00007ffff7ad353a in fontforge_main (argc=, argv=) at startui.c:1196
#24 0x00007ffff736676d in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#25 0x00000000004006e1 in _start ()
(gdb) quit
A debugging session is active.

       Inferior 1 [process 19196] will be killed.

Quit anyway? (y or n) y

在 gdb 中使用 gdb 的 quit 命令來退出 gdb 并關(guān)閉崩潰的 FontForge。如果你可以發(fā)送好的回溯給 FontForge 開發(fā)者,那么你可以為每個(gè)人提升程序的穩(wěn)定性!不要對報(bào)告這些問題感到害羞,崩潰如果沒有報(bào)告,那它被修復(fù)的可能性也很小。