Chapter 11. Tips

Table of Contents

11.1. Build under UTF-8
11.2. UTF-8 conversion
11.3. Hints for Debugging

Please also read insightful pages linked from Notes on Debian by Russ Allbery (long time Debian developer) which have best practices for advanced packaging topics.

The default locale of the build environment is C.

Some programs such as the read function of Python3 change their behavior depending on the locale.

Adding the following code to the debian/rules file ensures building the program under the C.UTF-8 locale.

LC_ALL := C.UTF-8
export LC_ALL

If upstream documents are encoded in old encoding schemes, converting them to UTF-8 is a good idea.

Use the iconv command in the libc-bin package to convert the encoding of plain text files.

 $ iconv -f latin1 -t utf8 foo_in.txt > foo_out.txt

Use w3m(1) to convert from HTML files to UTF-8 plain text files. When you do this, make sure to execute it under UTF-8 locale.

 $ LC_ALL=C.UTF-8 w3m -o display_charset=UTF-8 \
        -cols 70 -dump -no-graph -T text/html \
        < foo_in.html > foo_out.txt

Run these scripts in the override_dh_* target of the debian/rules file.

When you face build problems or core dumps of generated binary programs, you need to resolve them yourself. That’s debug.

This is too deep a topic to describe here. So, let me just list few pointers and hints for some typical debug tools.

  • Wikipedia: core dump

    • man core
    • Update the /etc/security/limits.conf file to include the following:

      * soft core unlimited
    • ulimit -c unlimited in ~/.bashrc
    • ulimit -a to check
    • Press Ctrl-\ or kill -ABRT 'PID' to make a core dump file
  • gdb - The GNU Debugger

    • info gdb
    • Debugging with GDB in /usr/share/doc/gdb-doc/html/gdb/index.html
  • strace - Trace system calls and signals

    • Use strace-graph script found in /usr/share/doc/strace/examples/ to make a nice tree view
    • man strace
  • ltrace - Trace library calls

    • man ltrace
  • sh -n script.sh - Syntax check of a Shell script
  • sh -x script.sh - Trace a Shell script
  • python3 -m py_compile script.py - Syntax check of a Python script
  • python3 -mtrace --trace script.py - Trace a Python script
  • perl -I ../libpath -c script.pl - Syntax check of a Perl script
  • perl -d:Trace script.pl - Trace a Perl script

    • Install the libterm-readline-gnu-perl package or its equivalent to add input line editing capability with history support.
  • lsof - List open files by processes

    • man lsof
[Tip]Tip

The script command records console outputs.

[Tip]Tip

The screen and tmux commands used with the ssh command offer secure and robust remote connection terminals.

[Tip]Tip

A Python- and Shell-like REPL (=READ + EVAL + PRINT + LOOP) environment for Perl is offered by the reply command from the libreply-perl (new) package and the re.pl command from the libdevel-repl-perl (old) package.

[Tip]Tip

The rlwrap and rlfe commands add input line editing capability with history support to any interactive commands. E.g. rlwrap dash -i' .